我正在尝试从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`
我确信这应该可行,但它不会返回正确数量的结果。
非常欢迎任何建议!
答案 0 :(得分:1)
对于此类查询,我认为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
中的重复项不会导致结果集中出现重复项。我还发现它更接近于查询的目的。
答案 1 :(得分:0)
您错过了WHERE
条件,可能就像
SELECT *
FROM `master`
JOIN `new` ON `master`.`urn` = `new`.`urn`
LEFT JOIN `old` ON `old`.`urn` = `new`.`urn`
WHERE `old`.`urn` IS NULL;