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

T-SQL:Como selecionar valores na lista de valores que NÃO estão na tabela?


Para SQL Server 2008
SELECT email,
       CASE
         WHEN EXISTS(SELECT *
                     FROM   Users U
                     WHERE  E.email = U.email) THEN 'Exist'
         ELSE 'Not Exist'
       END AS [Status]
FROM   (VALUES('email1'),
              ('email2'),
              ('email3'),
              ('email4')) E(email)  

Para versões anteriores, você pode fazer algo semelhante com uma tabela derivada UNION ALL -ing as constantes.
/*The SELECT list is the same as previously*/
FROM (
SELECT 'email1' UNION ALL
SELECT 'email2' UNION ALL
SELECT 'email3' UNION ALL
SELECT 'email4'
)  E(email)

Ou se você quiser apenas os inexistentes (como está implícito no título) em vez do conjunto de resultados exato fornecido na pergunta, você pode simplesmente fazer isso
SELECT email
FROM   (VALUES('email1'),
              ('email2'),
              ('email3'),
              ('email4')) E(email)  
EXCEPT
SELECT email
FROM Users