请教大家一个SQL语句的问题,郁闷加奇怪
现在有两个表A和B,均是以ID为主键,B表中有AID字段对应A.ID。
现在A表中有2400条记录,B表中有2000条记录,通过查询DISTINCT AID,可知有2000条。
通过下列语句查询时,情况如下:
SELECT * FROM A WHERE ID IN (SELECT AID FROM B) 结果为2000;
SELECT * FROM A WHERE ID NOT IN (SELECT AID FROM B ) 结果为 0
SELECT * FROM A WHERE ID NOT IN (SELECT ID FROM A WHERE ID IN (SELECT AID FROM B)) 结果为400
SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.ID =B.AID) 结果为400
呵呵,我奇怪的是第二条语句为什么会查询出0来,而不是400,请各位大大指教。谢谢
------解决方案--------------------SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.ID =B.AID)
是推荐做法
------解决方案--------------------如果表A中ID含有NULL的數據,那麼你第二條語句就會得到那樣的結果,但是第三條應該也會是0才對。
------解决方案--------------------挺奇怪我觉得不可能吧,
看你两个字段编码规则是否一样!!!
------解决方案--------------------你试试在里面加入Ltrim 与rtrim,这种情况是有可能的,你的数据是导进去的,以前的数据类型为char ,