Oracle SQL查询无回复消息返回空结果,请求修正方案
问题分析与解决
你的NOT EXISTS查询返回空的原因是:子查询里做了message和message_reply的左连接,无论是否有匹配的回复,这个子查询都会返回所有message的记录,导致NOT EXISTS条件永远不成立,所以结果为空。
正确写法1:NOT EXISTS 关联查询
SELECT * FROM message m WHERE NOT EXISTS ( SELECT 1 FROM message_reply mr WHERE mr.id_message = m.id_message )
- 子查询通过
mr.id_message = m.id_message关联外层的message记录,检查当前消息是否存在对应的回复 SELECT 1是最优写法,数据库不需要返回实际列值,只需判断是否存在记录
正确写法2:LEFT JOIN + IS NULL
SELECT m.* FROM message m LEFT JOIN message_reply mr ON m.id_message = mr.id_message WHERE mr.id_message IS NULL
- 左连接会保留所有
message记录,没有对应回复的记录中,message_reply的字段会为NULL - 通过
mr.id_message IS NULL过滤出无回复的消息
内容的提问来源于stack exchange,提问作者Matěj
相关产品推荐
相关产品推荐

