2010-11-29 4 views
1

Dans SQL Server 2008, je table avec des dossiers comme ceux-ci,Vérifiez si la valeur est disponible dans une liste ou non avec valeur disponible

Name 
---- 
John 
Amy 
Peter 
Jack 
Alan 
Linda 

J'ai une autre liste des utilisateurs (« John », « Adam », « Amy », « Frank ») Comment puis-je vérifier ce que l'utilisateur dans la liste est dans le tableau et non, sans créer de table temporaire

table de sortie prévue

Name Available 
---- --------- 
John John 
Adam Null 
Amy Amy 
Frank Null 

Répondre

2

En supposant que vous êtes sur SQL Server 2008, vous pouvez utiliser des constructeurs de ligne pour éviter d'avoir à créer explicitement une table temporaire. L'utilisation de plutôt que OUTER JOIN peut être plus efficace s'il peut y avoir des doublons de noms dans votre table de base (elle peut arrêter la recherche dès que le premier enregistrement correspondant est trouvé pour un nom).

SELECT name, 
     CASE 
       WHEN EXISTS 
        (SELECT * 
        FROM yourtable t 
        WHERE t.name = names.name 
        ) 
       THEN names.name 
     END AS Available 
FROM (VALUES 
     ('John'), ('Adam'),('Amy'), ('Frank')) names (name) 
3

Vous devriez juste besoin d'une gauche (ou r ight) se joindre à vos deux tables, quelque chose comme:

select n.name, u.name 
from names n 
    left join users u on n.name=u.name 
+0

Vous êtes rapide! ; o) –

2

Vous pouvez effectuer les opérations suivantes:

CREATE TABLE #tmpNames (UserName varchar(10)); 

INSERT INTO #tmpNames 
VALUES ('John'), ('Adam'), ('Amy'), ('Frank'); 

SELECT t.UserName AS Name, myTable.Name AS Available 
FROM #tmpNames t 
LEFT OUTER JOIN myTable m ON t.UserName = m.name 

Edit: La solution suppose que les noms de la table et la liste sont uniques; sinon, il y a un risque de doublons dans les résultats.

+0

Cela peut renvoyer des doublons. –

+0

@Martin: Vous supposez que les noms ne sont pas uniques, je suppose que les noms sont uniques en fonction des données d'exemple. Cependant, je devrais énoncer mes hypothèses et éditer. Merci. – bobs

Questions connexes