我在两个表之间有一个联合操作
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
生成的新表。
答案 0 :(得分:13)
在这里使用像“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。使用LEFT连接:减少混乱然后RIGHT连接。
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
为那些提出要求的人扩大gbn的答案。以下是如何使用union作为左连接的第一部分。
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