Напротив Внутреннего Запроса Соединения - PullRequest
34 голосов
/ 28 октября 2010

Может кто-нибудь помочь мне написать sql для scernerio следующим образом:

Table 1

2 columns: ID, Name

Table 2

2 columns: ID, Name

Я хочу, чтобы запрос показывал имена из таблицы 1, которых нет в таблице 2. Поэтому отфильтруйте все имена в таблице 1в таблице 2 находится результат запроса.Используйте ID для фильтрации, а не для имени.

Это поможет мне в том, что я пытаюсь сделать.Заранее спасибо

Ответы [ 5 ]

53 голосов
/ 28 октября 2010
Select * from table1
left join table2 on table1.id = table2.id
where table2.id is null
25 голосов
/ 28 октября 2010

Это должно работать лучше, чем left join...is null версия.См. здесь и здесь для сравнения.

select t1.id, t1.name
    from table1 t1
    where not exists(select null from table2 t2 where t2.id = t1.id)
16 голосов
/ 28 октября 2010

Используйте этот запрос

select
t1.*
from table1 t1
left outer join table2 t2
on t1.id=t2.id
where t2.id is null

это работает, соединяя все в t1 с тем, что существует в t2. предложение where отфильтровывает все записи, которые не существуют в t2.

3 голосов
/ 28 октября 2010
SELECT Table1.ID, Table1.Name, Table2.ID 
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.ID = Table2.ID 
WHERE Table2.ID IS NULL 

Я думаю, что это должно сделать.

0 голосов
/ 13 июля 2018
SELECT * FROM table1
WHERE table2.id NOT IN (SELECT id FROM table2)
...