我使用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
一起使用,我缺少什么?
非常感谢提前。
答案 0 :(得分:0)
如果子查询返回任何行,则EXISTS子查询为TRUE,NOT EXISTS子查询为FALSE
由于您的子查询返回了一些行,因此where子句为true - 对于发票表中的每个行。