UNION ALL 不适用于不同的列
Posted
技术标签:
【中文标题】UNION ALL 不适用于不同的列【英文标题】:UNION ALL not working with different columns 【发布时间】:2020-05-11 09:38:19 【问题描述】:同一列中的左连接行和右表行
我有两张桌子(经理和工人)。经理下的工人姓名应在经理姓名之下。预期输出如下:-
Manager Table:
ManagerCode Name Age Location
1 Chris 52 A
2 Rick 55 B
3 David 50 C
Worker Table
ManagerCode WName Age
1 Harry 33
1 Phil 40
2 Johnny 28
2 Jeff 47
Expected table:
ManagerCode Name Location
1 Chris A
1 Harry A
1 Phil A
2 Rick B
2 Johnny B
2 Jeff B
3 David C
Union All 正在为 Location 列创建问题,因为列数变得不同。我可以使用 null 作为工作表的位置。但是Manager中有几个列,例如位置。联合是正确的选择吗?
【问题讨论】:
您应该使用JOIN
获取工人的位置代码。
【参考方案1】:
您需要连接 Worker 和 Manager 表才能从相应的经理那里获取工人的位置代码。然后你可以将它与 manager 表联合起来。
SELECT ManagerCode, Name, Location
FROM (
SELECT ManagerCode, Name, Location, 1 AS isManager
FROM Manager
UNION ALL
SELECT w.ManagerCode, w.Name, m.Locationm, 0 AS isManager
FROM Worker AS w
JOIN Manager AS m ON w.ManagerCode = m.ManagerCode
) AS x
ORDER BY ManagerCode, isManager DESC
isManager
列用于将工人排在经理之后。
【讨论】:
以上是关于UNION ALL 不适用于不同的列的主要内容,如果未能解决你的问题,请参考以下文章
Laravel UNION ALL 不适用于 where 语句