从一个表中获取记录,不包括另一个表的记录

时间:2016-12-13 11:44:50

标签: mysql sql

我正在尝试从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`

我确信这应该可行,但它不会返回正确数量的结果。

非常欢迎任何建议!

2 个答案:

答案 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;