MySQL WHERE EXISTS 不工作
MySQL WHERE EXISTS not working
我将 Doctrine 与 Zend Framework 2 结合使用,使用子查询对我的发票进行查询 table。
这里是简化生成的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 中 运行 这个查询时,它 returns 所有发票,甚至那些不包含名称 'stephen'.[=14 的发票=]
然而,当我 运行 子查询分开时,它 returns 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
一起工作,我错过了什么?
非常感谢。
If a subquery returns any rows at all, EXISTS subquery is TRUE, and NOT EXISTS subquery is FALSE
由于您的子查询 returns 一些行,where 子句为真 - 对于发票 table 中的 每个 行。
我将 Doctrine 与 Zend Framework 2 结合使用,使用子查询对我的发票进行查询 table。
这里是简化生成的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 中 运行 这个查询时,它 returns 所有发票,甚至那些不包含名称 'stephen'.[=14 的发票=]
然而,当我 运行 子查询分开时,它 returns 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
一起工作,我错过了什么?
非常感谢。
If a subquery returns any rows at all, EXISTS subquery is TRUE, and NOT EXISTS subquery is FALSE
由于您的子查询 returns 一些行,where 子句为真 - 对于发票 table 中的 每个 行。