我有这个 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
但这对我来说也没有效果。
感谢您提供任何有用的信息。
你现有的逻辑已经关闭。您打算使用此版本:
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;