2016-12-03 103 views
0

我正在使用Zend Framework 2的Doctrine在我的发票表上使用子查询进行查询。MySQL WHERE EXISTS不工作

这里是充满在

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 

参数简化生成的SQL我遇到的问题是,当我运行此查询在phpMyAdmin它返回所有的发票,甚至那些不包含名称“斯蒂芬”。

但是,当我单独运行子查询时,它返回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子查询的工作,我缺少什么?

非常感谢提前。

回答

0

MySQL documentation

如果一个子查询返回任何行可言,EXISTS子查询是真实的,NOT EXISTS子查询是假

由于您的子查询返回一些行(S) where子句为真 - 对于发票表中的每个行。