MySQL WHERE EXISTS 不工作

标签 mysql subquery exists

我正在使用 Doctrine 和 Zend Framework 2 通过子查询对我的发票表进行查询。

这是简化生成的 SQL,其中已填写参数

SELECT *

FROM invoices i1 

WHERE (EXISTS (SELECT * FROM invoices i2 WHERE i2.invoice_first_name IN ('stephen') OR i2.invoice_middle_name IN ('stephen') OR i2.invoice_surname IN('stephen')))

ORDER BY i1.invoice_id DESC

我遇到的问题是,当我在 phpMyAdmin 中运行此查询时,它会返回所有发票,甚至是那些不包含名称“stephen”的发票。

但是,当我单独运行子查询时,它返回 2 行,这是正确的。

SELECT * FROM invoices i2 WHERE i2.invoice_first_name IN ('stephen') OR i2.invoice_middle_name IN ('stephen') OR i2.invoice_surname IN('stephen')

那么为什么子查询不能与 EXISTS 一起使用,我错过了什么?

提前非常感谢。

最佳答案

根据 MySQL documentation :

If a subquery returns any rows at all, EXISTS subquery is TRUE, and NOT EXISTS subquery is FALSE

由于您的子查询返回一些行,因此 where 子句为 true - 对于发票表中的每一行。

关于MySQL WHERE EXISTS 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40949217/

相关文章:

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

mysql - MySQL 中有没有一种方法可以计算一年中也已在前几年注册的成员数量?

php - Mysql中的空格删除

MySQL 查找同一个表中是否存在具有相同值的其他行

mysql - 优化mysql子查询执行时间

SQL:在嵌套查询中使用 Not Exists

Mysqldump:备份时为插入创建列名

mysql - 比较数据以显示彼此相差 1000 以内的结果

mysql - sql左连接限制子查询

file - 使用 cURL 检查文件是否存在于 FTPS 站点上