Frage
Ich habe eine Vereinigung opertaion zwischen zwei Tabellen
SELECT ID_1,
name_1,
surname_1,
FROM T_ONE
UNION
SELECT ID_2,
name_2,
surname_2
FROM TABLE_2
Ich möchte das Ergebnis dieser UNION
Operation mit einer anderen Tabelle verbinden oder sogar mit allen TABLE_1
.
Wie kann ich diese neue Tabelle Ergebnis der UNION
behandeln.
zum Beispiel nach dem vorherigen UNION
:
RIGHT JOIN TABLE_3
ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2
Ich weiß wirklich nicht, was ich anstelle der XXXXXXXXXXXXXXXX setzen müssen, die neue Tabelle durch die UNION
erzeugt Andle.
Lösung
Verwenden Sie eine abgeleitete Tabelle wie „foo“ hier und dann wieder JOIN wie Sie wollen:
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. Mit LINKS verbindet. Weniger verwirrend dann schließt sich rechts
Andere Tipps
Sie müssen eine in beide verbinden bieten 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
oder so ähnlich. Vergessen Sie nicht, dass eine UNION die Duplikate eliminiert, so dass, wenn Sie Duplikate enthalten sein, uyse 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
Um auf gbn Antwort erweitern oben für diejenigen, die darum gebeten haben. Hier ist, wie es mit der Union zu tun, wie der erste Teil des linken verbinden.
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