我正在使用 MySQL 5.5.37(InnodB 引擎)。我读过,出于性能原因,将子查询重写为涉及连接的内容可能会更好。下面是我想要运行的查询的极其简化的版本...
select m.* from msg m where
not (exists (select mr.ID from msg_read mr where mr.MESSAGE_ID=m.ID and mr.RECIPIENT='USER1')) and m.AUTHOR<>'USER1';
我不知道如何在连接方面重写“不存在”。有人可以提供一些指导吗?
最佳答案
使用LEFT JOIN
,然后测试要连接的表中的匹配列是否为NULL
。
SELECT DISTINCT m.*
FROM msg AS m
LEFT JOIN msg_read AS mr
ON mr.message_id = m.id AND mr.recipient = 'USER1'
WHERE m.author <> 'USER1'
AND mr.message_id IS NULL
关于mysql - 在MySQL 5中,如何根据连接编写 "not exists"子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773942/