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 不适用于不同的列的主要内容,如果未能解决你的问题,请参考以下文章

Mysql联合查询UNION和UNION ALL的使用介绍

MYSQL union 和union all 用法 /

MYSQL union 和union all 用法 /

Laravel UNION ALL 不适用于 where 语句

使用 union all 插入,并且 nextval 不适用于重复值

mysql的查询语句union是啥意思