选择 SQL 中没有响应的消息

问题描述 投票:0回答:1

我有这个 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/

如何查找一个表中在另一表中没有对应行的行

https://www.tutorialspoint.com/sql_certificate/get_data_from_multiple_tables.htm

但这对我来说也没有效果。

感谢您提供任何有用的信息。

sql oracle-sqldeveloper
1个回答
1
投票

你现有的逻辑已经关闭。您打算使用此版本:

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;
© www.soinside.com 2019 - 2024. All rights reserved.