日期:2014-05-19  浏览次数:20422 次

not in运行和预计的结果不一样
我首先导入了两个表yy和表js,有相同的列bh,其中表yy的bh列有一些表js的bh列中没有的数据,现在想跳出这些yy表有但js表没有的数据,语言如下
SELECT   *
FROM   yy
WHERE   bh   not   in(select   bh   from   js)
ORDER   BY   bh;
但运行后一行数据也没有,为什么?表yy的bh列数据有的重复,表js的bh列的数据不重复.我觉得应该与这个没关系吧

------解决方案--------------------
表yy的bh列数据有的重复,表js的bh列的数据不重复.?


要YY表BH列的数据在JS表的BH列里没有才能查出来呢,你只是重复,但在JS表的BH列里还是有相应的记录啥。
------解决方案--------------------

用判断真假方式
select * from yy where not exists(select 1 from js where bh=yy.bh) order by hb
------解决方案--------------------
SELECT *
FROM yy
WHERE bh not in(select bh from js WHERE bh IS NOT NULL) /*加上NOT NULL*/
ORDER BY bh

----或者
SELECT DISTINCT a.*
FROM yy as a
LEFT JOIN js as b on a.bh = b.bh
WHERE b.bh IS NULL
ORDER BY a.bh

------解决方案--------------------
原因就是bb表中有空值,上面的回复真的是太好拉