oracle 在SQL中选择没有响应的消息

cnh2zyt3  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(80)

我有这个SQL查询:

select * 
from message
where not exists (select message.* 
                  from message
                  left join message_reply on message.id_message = message_reply.id_message)

我在Oracle SQL Developer工作。
我想要的是得到数据库中没有答案的每一条消息。
系统是这样工作的:message是接收到的消息,message_reply是我们对此消息的回答。所以有1:n连接1是消息,n是应答。
我的查询返回一个空表。
是的,在我们的系统中有很多没有答案的消息要显示。
像往常一样,我在网上尝试了很多教程,比如:
https://www.oracletutorial.com/oracle-basics/oracle-not-exists/
How to find rows in one table that have no corresponding row in another table
https://www.tutorialspoint.com/sql_certificate/get_data_from_multiple_tables.htm
但对我来说也一样。
感谢您提供的任何有用的信息。

n53p2ov0

n53p2ov01#

你的存在逻辑是错的。您打算使用此版本:

SELECT *
FROM message m
WHERE NOT EXISTS (
    SELECT 1
    FROM message_reply mr
    WHERE m.id_message = mr.id_message
);

简单地说,上面的代码查找不存在任何匹配消息回复的所有消息。你把左边的反连接和存在搞混了。反连接版本将是:

SELECT m.*
FROM message m
LEFT JOIN message_reply mr
    ON m.id_message = mr.id_message
WHERE mr.id_message IS NULL;

相关问题