`存在`和`IN`在MySQL中给出了两个不同的结果

时间:2017-07-14 05:52:54

标签: mysql sql exists

  

in查询

SELECT * FROM commodity 
WHERE id IN (SELECT cid FROM specifications s WHERE s.id<600);
  

EXISTS查询

SELECT * FROM commodity  
WHERE exists(SELECT c.* 
              FROM specifications s,commodity c 
              WHERE  s.id < 600 and c.id = s.cid );

为什么我使用上述两个查询获得两个单独的结果。我做错了什么?

2 个答案:

答案 0 :(得分:0)

JOIN运算符的子查询中不需要EXISTS运算:

SELECT * FROM commodity c 
WHERE exists(SELECT c.* 
              FROM specifications s
              WHERE  s.id < 600 and c.id = s.cid );

如果id不是NULL字段,则这两个查询现在是等效的。

答案 1 :(得分:0)

您没有链接内部查询中的外部商品表。它应该是这样的。

SELECT * FROM commodity c 
WHERE exists(SELECT s.* 
               FROM specifications s
              WHERE  s.id < 600 and c.id = s.cid );