6

我在两个表之间有一个联合操作

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.

4

4 回答 4

15

在此处使用“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

PS。使用左连接:比右连接更容易混淆。

于 2009-09-13T18:11:45.290 回答
2

您需要在两个 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

于 2009-09-13T18:13:47.067 回答
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
于 2011-12-05T18:19:04.727 回答
0

为那些问过的人扩展上面的 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
于 2018-05-04T22:26:52.060 回答