MySQL WHERE EXISTS 不工作

MySQL WHERE EXISTS not working

我将 Doctrine 与 Zend Framework 2 结合使用,使用子查询对我的发票进行查询 table。

这里是简化生成的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 中 运行 这个查询时,它 returns 所有发票,甚至那些不包含名称 'stephen'.[=14 的发票=]

然而,当我 运行 子查询分开时,它 returns 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

由于您的子查询 returns 一些行,where 子句为真 - 对于发票 table 中的 每个 行。