2011-09-16 4 views
1

J'ai 2 tables où en fonction d'une valeur sur le premier, je dois sélectionner une colonne sur le second.requête sql conditionnelle

Exemple

table1

data1|data2|type 
P3 | C | R 
P1 | D | N 
P2 | C | R 
P1 | C | N 
P2 | D | R 
P3 | D | N 

table2

name|revolution|nibs 
C |repeat |may 
D |genocide |fill 

, je veux donc obtenir les valeurs data1 selon le type que ce (R pour la révolution, N pour grué) Demande de P3:

name|value 
C |repeat 
D |fill 

Interrogation pour P1

name|value 
C |may 
D |fill 

Merci

Répondre

2
SELECT t2.name, IF(t1.type='R',t2.revolution,t2.nibs) as value 
FROM table1 t1 
LEFT JOIN table2 t2 ON t1.data2 = t2.name 
WHERE t1.data1 = ? 
+0

Votre première réponse était fausse (précédent l'édition) mais j'ai réussi à l'obtenir et nous avons atteint le même résultat, alors merci: D –

+0

@Diego Yep, misse d la condition de jointure :) – xdazz

3

L'approche standard pour cela est d'utiliser un cas:

select 
    t1.data2, 
    case t1.type 
     when 'R' then t2.revolution 
     when 'N' then t2.nibs 
    end 
from table1 t1 
join table2 t2 on t1.data2 = t2.name 
where data1 = ?