2009-09-13 11 views
5

que tienen un opertaion unión entre dos tablasSQL: UNIÓN cascada y unirse a

SELECT ID_1, 
     name_1, 
     surname_1, 
    FROM T_ONE 
UNION 
SELECT ID_2, 
     name_2, 
     surname_2 
    FROM TABLE_2 

me quiero unir el resultado de esta operación UNION con otra mesa o incluso con toda TABLE_1.

¿Cómo puedo manejar este nuevo resultado de la tabla del UNION.

por ejemplo, después de que el anterior UNION:

RIGHT JOIN TABLE_3 
     ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2 

realmente no sé lo que necesito para poner en lugar del XXXXXXXXXXXXXXXX a andle la nueva tabla generada por el UNION.

Respuesta

12

Utilizar una tabla derivada como "foo" aquí, y luego unirse de nuevo sin embargo desea:

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 IZQUIERDAS: menos confusas y luego RIGHT se une.

+2

y me gustaría utilizar UNION ALL en lugar de sólo UNIÓN con el fin de evitar la clasificación de los resultados, ya que usted sabe son diferentes (los datos de las tablas T_ONE y TABLE_2 no se superponen, ¿verdad?) – van

+0

@Van: No podemos asumir eso, pero es un buen punto. Editado – gbn

+0

Estoy enfrentando un problema similar, excepto que los sindicatos están en la parte superior, y no puedo usar la combinación correcta porque actualmente no es compatible con la plataforma. ¿Es posible reestructurarlo para usar una unión a la izquierda con uniones en la primera selección? –

1

es necesario proporcionar una combinación en tanto seleccionar:

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 por el estilo. No hay que olvidar que una unión elimina los duplicados, así que si quieres duplicados que se incluirán, uyse UNION ALL

2
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