MySQL WHERE EXISTS无法正常工作

时间:2016-12-03 15:11:43

标签: 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中运行此查询时,它会返回所有发票,即使是那些不包含名称&#f; 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一起使用,我缺少什么?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

根据MySQL documentation

  

如果子查询返回任何行,则EXISTS子查询为TRUE,NOT EXISTS子查询为FALSE

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