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 .

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top