select t1.* 
from t1,(select c from t2 where ...) t3
where t1.c=t3.c
----------------------
select t1.*
from t1
where t1.c in (select c from t2 where ...)
---------------------
问下,这两句查询的结果是不是不一样,为什么呢?

解决方案 »

  1.   

    (select c from t2 where ...)
    这里面有重复的数据吧.
      

  2.   

    第一个要表连接,如果,(select c from t2 where ...)中有重复数据,连接时相等的数据会笛卡尔积.
    第二个不会.
      

  3.   

    结果一样,
    第一个是找出t1中和t2中c相同的t1记录
    第二个是找出t1中c存在t2中的记录,也就是第一个,
    效率的话,第一个比较好
      

  4.   

    原来是我忽略了,有相同的数据,怪不得数据查出来有问题
    加个distinct,不过这样好不?
      

  5.   

    如果数据量不大 可以加distinct过滤,数据大了可能影响效率,因为distinct 要排序
      

  6.   

    试试用exists吧,你可以测试下三种方式的效率.一般来说exists效率高些.