Pregunta
Tengo una operación sindical entre dos mesas
SELECT ID_1,
name_1,
surname_1,
FROM T_ONE
UNION
SELECT ID_2,
name_2,
surname_2
FROM TABLE_2
Quiero unir el resultado de esta operación UNION
con otra tabla o incluso con todas las TABLE_1
.
¿Cómo puedo manejar el resultado de esta nueva tabla de UNION
.
por ejemplo después del UNION
anterior:
RIGHT JOIN TABLE_3
ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2
Realmente no sé lo que necesito poner en lugar de XXXXXXXXXXXXXXXX para crear la nueva tabla generada por UNION
.
Solución
Utilice una tabla derivada como " foo " aquí, y luego ÚNETE nuevamente como quieras:
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. Use combinaciones IZQUIERDA: menos confusas que las combinaciones DERECHA.
Otros consejos
Debe proporcionar una unión en ambos 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 algo así. No olvides que UNION elimina los duplicados, así que si quieres que se incluyan duplicados, 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
Para ampliar la respuesta de gbn anterior para aquellos que han preguntado. Aquí se explica cómo hacerlo con la unión como la primera parte de la unión izquierda.
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