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
Où 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
?
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=...
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'