Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como selecionar todos os registros de uma tabela que não existem em outra tabela?

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

P :O que esta acontecendo aqui?

A :Conceitualmente, selecionamos todas as linhas de table1 e para cada linha tentamos encontrar uma linha em table2 com o mesmo valor para o name coluna. Se não houver tal linha, apenas deixamos a table2 parte do nosso resultado vazio para essa linha. Em seguida, restringimos nossa seleção escolhendo apenas as linhas no resultado em que a linha correspondente não existe. Finalmente, ignoramos todos os campos do nosso resultado, exceto o name coluna (a que temos certeza que existe, de table1 ).

Embora possa não ser o método de melhor desempenho possível em todos os casos, ele deve funcionar basicamente em todos os mecanismos de banco de dados que tentam implementar o SQL ANSI 92