Вопрос

У меня есть операция объединения между двумя таблицами

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

Я хочу присоединиться к результату этого UNION работа с другой таблицей или даже со всеми TABLE_1.

Как я могу обработать этот новый результат таблицы UNION.

например, после предыдущего UNION:

RIGHT JOIN TABLE_3
        ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2

Я действительно не знаю, что мне нужно поставить вместо XXXXXXXXXXXXXXXX, чтобы создать новую таблицу, созданную UNION.

Это было полезно?

Решение

Используйте здесь производную таблицу, например «foo», а затем снова ПРИСОЕДИНЯЙТЕСЬ, как хотите:

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

ПС.Используйте ЛЕВЫЕ соединения:менее запутанно, чем присоединяется RIGHT.

Другие советы

Вы должны предоставить объединение в обоих 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

Или что-то в этом роде. Не забывайте, что UNION удаляет дубликаты, поэтому, если вы хотите, чтобы дубликаты были включены, используйте 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

Чтобы расширить ответ gbn выше для тех, кто спросил. Вот как это сделать с объединением в качестве первой части левого соединения.

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top