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

标签 mysql sql exists

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 字段,这两个查询是等效的。

关于mysql - `Exists` 和 `IN` 在 MySQL 中给出两个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45095600/

相关文章:

mysql - 计算 MySQL 中的百分比排名

mysql - 仅针对 MyISAM 表更改 mysql 中的表

r - 使用 R 在现有 tcltk 窗口中显示进度条

mysql - 检查数据库中是否存在条目的最快方法是什么?

java - 如何根据外键从引用表中获取值?

java - 如何使用 JDBC 来最大化 Netty 的性能?

python - SQLAlchemy 无缘无故地将 "=1"添加到子查询的末尾

mysql - 存储过程不返回值

sql - 如何解析存储在 MS SQL 2005 中的 varbinary 中的 excel (.xls) 文件?

python - SqlAlchemy 存在用法