日期:2014-05-18  浏览次数:20582 次

请教大家一个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 ,