将三个表与 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
.
的选项表现更好
我想合并三个表。其中两个多列必须连接在一起。
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
.