2016-12-03 67 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子句爲真 - 對於發票表中的每個行。