现在有两个表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,请各位大大指教。谢谢

解决方案 »

  1.   

    改成
    SELECT * FROM A WHERE A.ID NOT IN (SELECT AID FROM B )
    再试试看呢
      

  2.   

    改成
    SELECT * FROM A WHERE A.ID NOT IN (SELECT AID FROM B )后,结果仍然为0。
    microtry(米醋),我也是很奇怪呀,应该说语句没有问题,但是结果就是不对,呵呵,第四句是朋友帮我想的,结果正确。但是无人知道为什么第二句不正确
      

  3.   

    SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.ID =B.AID)
    是推荐做法
      

  4.   

    dreamreality(追梦) :数据类型是一样的,都是VARCHAR,长度50
      

  5.   

    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----這兩句的結果不一樣?
      

  6.   

    如果表A中ID含有NULL的數據,那麼你第二條語句就會得到那樣的結果,但是第三條應該也會是0才對。
      

  7.   

    paoluo(一天到晚游泳的鱼):两个表的ID均为主键,不能为空和重复的。
      

  8.   

    你试试在里面加入Ltrim 与rtrim,这种情况是有可能的,你的数据是导进去的,以前的数据类型为char ,