Question
J'ai une opération syndicale entre deux tables
SELECT ID_1,
name_1,
surname_1,
FROM T_ONE
UNION
SELECT ID_2,
name_2,
surname_2
FROM TABLE_2
Je souhaite associer le résultat de cette opération UNION
à une autre table ou même à tous les TABLE_1
.
Comment gérer ce nouveau résultat de table du UNION
.
par exemple après le UNION
précédent:
RIGHT JOIN TABLE_3
ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2
Je ne sais vraiment pas ce que je dois mettre à la place de XXXXXXXXXXXXXXXX pour andle la nouvelle table générée par UNION
.
La solution
Utilisez une table dérivée, telle que "foo". ici, puis REJOIGNEZ à nouveau comme vous le souhaitez:
SELECT
*
FROM
TABLE_3
LEFT JOIN
(
SELECT ID_1, name_1, surname_1, FROM T_ONE
UNION --ALL would be more efficient if results do not overlap, as van's comment said
SELECT ID_2, name_2, surname_2 FROM TABLE_2
) foo ON TABLE_3.ID_3 = foo.ID_1
PS. Utilisez les jointures GAUCHE: moins de confusion que les jointures DROITE.
Autres conseils
Vous devez fournir une jointure dans les deux commandes SELECT:
SELECT ID_1, name_1, surname_1, FROM T_ONE
RIGHT JOIN TABLE_3 ON TABLE_3.ID_3 = T_ONE.ID_1
UNION
SELECT ID_2, name_2, surname_2 FROM TABLE_2
RIGHT JOIN TABLE_3 ON TABLE_3.ID_3 = TABLE_2.ID_2
Ou quelque chose comme ça. N'oubliez pas qu'une UNION élimine les doublons. Si vous souhaitez inclure les doublons, utilisez UNION ALL
.SELECT ID_1, name_1, surname_1, FROM T_ONE
from
(SELECT ID_1, name_1, surname_1, FROM T_ONE
UNION
SELECT ID_2, name_2, surname_2 FROM TABLE_2 ) foo
left join TABLE_3
ON TABLE_3.ID_3 =foo.ID_2
Pour développer la réponse de gbn ci-dessus à ceux qui l'ont demandé. Voici comment procéder avec le syndicat lorsque la première partie de la gauche se joint.
SELECT table3.phone, foo.fname, foo.lname, foo.email
FROM
(SELECT table1.fname,table1.lname,table1.email
FROM table1
UNION
SELECT table2.fname,table2.lname,table2.email
FROM table2
) foo
LEFT JOIN table3
ON foo.lname = table3.lname