我正在尝试从master table中选择与new table中的记录匹配的记录,但要排除new tableold table匹配的记录。 urn字段是它们之间的共同点。

我的查询是这样的:

SELECT *
FROM `master`
JOIN `new` ON `master`.`urn` = `new`.`urn`
LEFT JOIN `old` ON `old`.`urn` = `new`.`urn`


我敢肯定这应该可以,但是不会返回正确的结果量。

任何建议都非常欢迎!

最佳答案

对于这样的查询,我认为是exists而不是exists

select m.*
from master m
where exists (select 1 from new n where n.urn = m.urn) and
      not exists (select 1 from old o where o.urn = m.urn);


我更喜欢exists而不是显式的join,因为在new中重复不会导致结果集中重复的危险。我还发现它更紧密地代表了查询的目的。

10-08 14:42