我正在尝试从master table
中选择与new table
中的记录匹配的记录,但要排除new table
与old 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
中重复不会导致结果集中重复的危险。我还发现它更紧密地代表了查询的目的。