2010-10-27 8 views
0

Ma table ressemble à ceci:sql select nom de la requête paire -value

ID NAME  VALUE 
1 home  San Jose 
1 visitor New Jersey 
2 home  Chicago 
2 visitor Los Angeles 
3 home  Tampa Bay 
3 visitor Pittsburgh 
4 home  Montreal 
4 visitor N.Y. Islanders 
5 home  Montreal 
5 visitor N.Y. Islanders 
6 home  Carolina 
6 visitor Montreal 
7 home  Montreal 
7 visitor Atlanta  

Comment puis-je trouver une requête SQL qui sélectionne tous les ID qui ont soit la maison = Montréal ou visiteur = Montréal, mais pas d'autres IDs. Donc dans ce cas, nous reviendrons 4, 5, 6, 7

+5

ressemble devoirs .. – pavanred

Répondre

3
SELECT 
    ID 
FROM Table 
WHERE 
    (Name = 'home' and Value = 'Montreal') 
    OR 
    (Name = 'visitor' and Value = 'Montreal') 
0
Select ID from Table where Name = 'home' and Value = 'Montreal' 
UNION ALL 
Select ID from Table where Name = 'visitor' and Value = 'Montreal' 
+0

+1 -1 pour contrer la. Ce n'est pas une solution optimale, mais cela devrait fonctionner. –

+0

Oui, ce n'est pas optimal. Avant de soumettre la requête que j'avais tapée, John Hartsock avait fourni une réponse similaire. Donc, je viens de fournir une autre alternative. – pavanred

5

Si la « maison » et « visiteur » sont les seules options qui semble être vrai dans un cas comme exemple donné où vous avez des jeux entre deux équipes sportives, puis simplement:

select ID 
    from YourTable 
    where Value = 'Montreal' 
3

En supposant que la colonne name contient des valeurs autres que simplement « la maison » et « visiteur » - il est préférable d'être explicite pour vous assurer que vous obtenir les enregistrements que vous voulez:

SELECT t.id 
    FROM YOUR_TABLE t 
WHERE t.name IN ('home', 'visitor') 
    AND t.value = 'Montreal' 

... sinon, il n'y a pas de valeur, y compris la filtration dans la requête:

SELECT t.id 
    FROM YOUR_TABLE t 
WHERE t.value = 'Montreal'