Je voudrais pouvoir vérifier facilement quels identifiants uniques n'existent pas dans une table, de ceux fournis dans une requête.
Pour mieux expliquer, voici ce que je ferais maintenant, pour vérifier quels ID de la liste "1, 2, 3, 4" n'existent pas dans un tableau:
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
, disons que la table ne contient aucune ligne avec l'ID 2.- Vider les résultats dans Excel
- Exécutez une RECHERCHEV sur la liste d'origine qui recherche chaque valeur de liste dans la liste de résultats.
- Tout RECHERCHEV qui se traduit par un
#N/A
est sur une valeur qui ne s'est pas produite dans la table.
Je pense qu'il doit y avoir une meilleure façon de le faire. Je cherche, idéalement, quelque chose comme
Liste à vérifier -> Requête sur la table à vérifier -> Membres de la liste absents du tableau
sql-server
sql-server-2005
except
NReilingh
la source
la source
Réponses:
Utilisation
EXCEPT
:Voir SqlFiddle .
Le
values
constructeur ne fonctionnera que sur SQL Server 2008 ou version ultérieure. Pour 2005, utilisezcomme détaillé dans cette réponse SO .
la source
Incorrect syntax near the keyword 'values'.
courirSELECT * FROM (values ('search string'),('other string')) as T(ID)
Je construirais une variable de table ou une table temporaire contenant les ID que vous recherchez ... puis j'utiliserais la solution de Remus, moins le sucre syntaxique de 2008:
la source
Je suis maintenant deux ans plus sage (et j'ai un SQL Server plus récent) que lorsque j'ai posé cette question, donc pour célébrer le badge Famous Question que j'ai obtenu pour poser cette question, voici ce que je ferais maintenant. (Je ne pense pas avoir utilisé l'
EXCEPT
opérateur depuis.)Je dirais que la
LEFT JOIN
méthode ci-dessous est plus utile queEXCEPT
puisque vous pouvez la composer avec d'autres jointures sans avoir besoin d'un CTE.la source