2016-12-13 242 views
0

我试图从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` 

我敢肯定这应该工作,但它并没有返回结果的正确的金额。

任何建议非常欢迎!

回答

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; 
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中重复的危险将导致结果集中出现重复。我也发现它更接近地代表了查询的目的。

相关问题