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

`Exists`and `IN` give two different results in MySQL

The in Query

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

The EXISTS Query

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

为什么我使用上述两个查询得到两个不同的结果。我做错了什么?

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

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

这两个查询现在是等效的,前提是 id 不是 NULL 字段。

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

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