`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 );
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 );