Eu gostaria de poder verificar facilmente quais identificadores exclusivos não existem em uma tabela, daqueles fornecidos em uma consulta.
Para explicar melhor, eis o que eu faria agora, para verificar quais IDs da lista "1, 2, 3, 4" não existem em uma tabela:
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
, digamos que a tabela não contenha linha com o ID 2.- Despejar os resultados no Excel
- Execute um VLOOKUP na lista original que pesquisa cada valor da lista na lista de resultados.
- Qualquer VLOOKUP que resulte em
#N/A
está em um valor que não ocorreu na tabela.
Estou pensando que deve haver uma maneira melhor de fazer isso. Estou procurando, idealmente, algo como
Lista para verificar -> Consulta na tabela para verificar -> Membros da lista que não estão na tabela
sql-server
sql-server-2005
except
NReilingh
fonte
fonte
Respostas:
Use
EXCEPT
:Consulte SqlFiddle .
O
values
construtor funcionará apenas no SQL Server 2008 ou posterior. Para 2005, useconforme detalhado nesta resposta SO .
fonte
Incorrect syntax near the keyword 'values'.
ao executarSELECT * FROM (values ('search string'),('other string')) as T(ID)
Eu criaria uma variável de tabela ou tabela temporária contendo os IDs que você está procurando ... depois usaria a solução de Remus, menos o açúcar sintático de 2008:
fonte
Agora estou alguns anos mais sábio (e possuo um SQL Server mais recente) do que quando fiz essa pergunta; portanto, para comemorar o distintivo de Pergunta Famosa que recebi por fazer isso, aqui está o que eu faria agora. (Acho que nunca usei o
EXCEPT
operador desde então.)Eu diria que o
LEFT JOIN
método abaixo é mais útil do queEXCEPT
desde que você pode compor com outras junções sem precisar de um CTE.fonte