Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL :comment sélectionner des valeurs dans la liste de valeurs qui ne figurent PAS dans la table ?

Pour 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)  

Pour les versions précédentes, vous pouvez faire quelque chose de similaire avec une table dérivée UNION ALL -ing les 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 si vous voulez juste ceux qui n'existent pas (comme l'implique le titre) plutôt que le jeu de résultats exact donné dans la question, vous pouvez simplement le faire

SELECT email
FROM   (VALUES('email1'),
              ('email2'),
              ('email3'),
              ('email4')) E(email)  
EXCEPT
SELECT email
FROM Users