web-dev-qa-db-fra.com

Rejoindre la table deux fois - sur deux colonnes différentes de la même table

J'ai une base de données très déroutante avec une table qui contient deux valeurs dont j'ai besoin dans une table distincte. Voici mon problème:

Table1
- id

Table2
- id
- table1_id
- table3_id_1
- table3_id_2

Table3
- id
- value

Je dois aller de table1 et faire une jointure qui me rendrait la valeur de table3 dans deux colonnes distinctes. Je veux donc quelque chose comme ça:

table1.id | table2.id | table2.table3_id_1 | table2.table3_id_2 | X | Y

X et Y sont les valeurs de la ligne connectée par table3_id_1 et table3_id_2 respectivement.

Peut-être en faire des variables ou quelque chose pour que je puisse également les filtrer dans une clause WHERE?

17
Red

Si vous joignez plusieurs fois une table, utilisez des alias pour les distinguer:

SELECT table1.id,table2.id,table2.table3_id_1,table2.table3_id_2,t3_1.id,t3_2.id
FROM table1
JOIN table2 ON table1.id=table2.table1_id
JOIN table3 t3_1 ON table2.table3_id_1=t3_1.id
JOIN table3 t3_2 ON table2.table3_id_2=t3_2.id
WHERE ... t3_1.id=... AND ... t3_2.id=...
8
nosid
select t1.id as table1_id, 
    t2.id as table2_id, 
    t2.table3_id_1, 
    t2.table3_id_2,
    t3_1.value as X, 
    t3_2.value as Y
from Table1 t1
inner join Table2 t2 on t1.id = t2.table1_id
inner join Table3 t3_1 on t2.table3_id_1 = t3_1.id
inner join Table3 t3_2 on t2.table3_id_2 = t3_2.id
where t3_1.value = 'some_value'
    or t3_2.value = 'some_other_value'
3
RedFilter