我正在使用 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/