MySQL WHERE EXISTS 不工作
Posted
技术标签:
【中文标题】MySQL WHERE EXISTS 不工作【英文标题】:MySQL WHERE EXISTS not working 【发布时间】:2016-12-03 15:11:42 【问题描述】:我正在使用 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 中运行此查询时,它会返回所有发票,即使是那些不包含名称“斯蒂芬”的发票。
但是,当我单独运行子查询时,它会返回 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】:根据mysql documentation:
如果子查询返回任何行,EXISTS 子查询为 TRUE,NOT EXISTS 子查询为 FALSE
由于您的子查询返回一些行,因此 where 子句为真 - 对于发票表中的 每一 行。
【讨论】:
以上是关于MySQL WHERE EXISTS 不工作的主要内容,如果未能解决你的问题,请参考以下文章
SQL 无法让 WHERE EXISTS 子句正常工作,并且仅返回在特定日期内具有客户端类型的行
sql 查询的正确语法和 WHERE EXISTS 替代方案
MySQL Where Not Exists 根据 3 个值插入记录