遇到一个奇怪的问题,一个比较复杂的查询语句:
select ... from table1
left join table2 on ...
left join table3 on ...
left join table4 on ...
where 条件1 and (某字段 in(select .. from ... where ...)) 
该语句能正确查询到100多条记录,但是在最后where子句中加上一个限制条件 and 条件3 之后,查询出的记录理应减少,但却增加到500多条!然后我弃用left join,把所有的条件都放到where子句中用and连接,这样结果是正确的。可能原因在哪里呢?

解决方案 »

  1.   

    连接条件或表连接有问题(left join、right join、inner join)具体用那一种连接
    具体的实际环境。
      

  2.   

    应该是数据对应问题。这里的and同inner join的效果吧
      

  3.   

    下面where后会跟你的TABLE 2 3 4 又互相关联了。所以导致会多出数据,
      

  4.   

    应该是表之间产生类似笛卡尔集引起的吧,毕竟你使用的是left jion .
      

  5.   

    如果只是查一个表  加了where还能多查出一堆那才诡异了
      

  6.   

    执行顺序不是先on连接,然后从临时表中筛选出符合where条件的记录吗?既然where是最后执行的,为什么还能多查出一堆呢?
      

  7.   

    tab_A  10条记录
    tab_B  10条记录
    select * from tab_a,tab_b 就会产生100条记录,这就是笛卡儿积。通常查询都是笛卡尔子集。你第三个条件是什么,除了可能差生笛卡尔,也可能是逻辑错误
      

  8.   

    多的肯定是笛卡尔积导致的,你最后的where难道在left join解决不了?
      

  9.   

    SQL 语句写全点.好看问题.
      

  10.   

    看看你的表和SQL,太不具体了,不知道是什么原因。
      

  11.   

    不把SQL贴全了,让人怎么定位问题呢?