2016-12-13 5 views
0

Я пытаюсь выбрать записи из 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

Вы упускаете условие 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 приведут к дублированию в результирующем наборе. Я также считаю, что он более точно представляет цель запроса.

Смежные вопросы