UNION ALL在不同的列中不工作

问题描述 投票:0回答:1

在同一列中左连接行和右连接表行。

我有两个表(经理和工人)。一个经理下的工人的名字应该在经理名字下面。预期的输出如下所示:-

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 作为 Worker 表的 Location。但是在经理表中有几个像位置这样的列。联合是正确的选择吗?

mysql union
1个回答
0
投票

你需要连接工人表和经理表,从他们对应的经理那里得到工人的位置代码。然后你可以将其与经理表联合起来。

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 栏目用于将工人排列在其经理之后。

© www.soinside.com 2019 - 2024. All rights reserved.