将三个表与 join 和 union 结合起来

Combine three tables with join an two with union

我想合并三个表。其中两个多列必须连接在一起。

T1

id 姓名
1 卡尔
2 最大
3 鲍勃

t2

id t1_id 姓氏 函数
5 1 约翰森 焊工
6 2 克林顿 木匠
7 3 边缘 梅森

t3

id t2-id 函数
9 5 金工
10 6 橱柜制造商
11 7 参加者

结果

id 姓名 姓氏 函数
1 卡尔 约翰森 焊工
1 卡尔 约翰森 金工
2 最大 克林顿 木匠
2 最大 克林顿 橱柜制造商
3 鲍勃 边缘 梅森
3 鲍勃 边缘 参加者

我的密码是

Select t1.id, t1.naam, t2.lastname , t3.Function 
From t1
   left join t2 on t2.t1-id=t1.[id]
   left join t3 on t3.t2-id=t2.[id],
   (Select
        Function
        from t2
        union 
        select
        Function
        from t3)t

您需要使用基于 id 的联合的子查询联接

Select 
    t1.id, t1.naam, t2.lastname, t.Function 
From 
    t1
Left Join 
    t2 On t2.t1 - id = t1.[id]
Left Join 
    t3 On t3.t2 - id = t2.[id]
Inner Join 
    (Select id, Function
     From t2
     Union 
     Select id, Function
     From t3) t On t.id = t1.id 

我正在考虑对两个单独的查询使用 union all,一个在两个表上,一个在三个表上:

select t1.id, t1.name, t2.lastname, t2.function
from t1 join
     t2
     on t1.id = t2.t1_id
union all
select t1.id, t1.name, t2.lastname, t3.function
from t1 join
     t2
     on t1.id = t2.t1_id join
     t3
     on t2.id = t3.t2_id;

请注意,不需要外部联接。我猜这会比 union/union all.

的选项表现更好