Domanda
Ho un'operazione di unione tra due tabelle
SELECT ID_1,
name_1,
surname_1,
FROM T_ONE
UNION
SELECT ID_2,
name_2,
surname_2
FROM TABLE_2
Voglio unire il risultato di questa operazione UNION
con un'altra tabella o anche con tutti i TABLE_1
.
Come posso gestire il risultato di questa nuova tabella di UNION
.
ad esempio dopo il precedente UNION
:
RIGHT JOIN TABLE_3
ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2
Non so davvero cosa devo mettere invece di XXXXXXXXXXXXXXXX per modificare la nuova tabella generata da UNION
.
Soluzione
Utilizza una tabella derivata come " foo " qui e poi UNISCITI di nuovo come desideri:
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. Utilizza i join SINISTRO: meno confuso dei join DESTRA.
Altri suggerimenti
Devi fornire un join in entrambi 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
O qualcosa del genere. Non dimenticare che un UNION elimina i duplicati, quindi se vuoi che vengano inclusi duplicati, usa 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
Espandere la risposta di gbn sopra per coloro che hanno chiesto. Ecco come farlo con il sindacato come prima parte del join sinistro.
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