我有两个这样的表:
表1- CivilOffices
Id - Primary key
OfficeId - Foreign Key - refer to Office Table
Created Date
Location
ParentOffice - Foreign Key - refer to Office Table
表2-办公室
OfficeId - Primary key
Name
我想查询所有具有各自上级办公室名称的办公室。但是当我尝试查询时,查询返回的是父办公室的id,而不是父办公室的名称。
下面是我使用的查询。
SELECT O.OfficeId, O.Name, CO.ParentOffice
FROM Offices As O
LEFT JOIN CivilOffices As CO
ON O.OfficeId=CO.OfficeId;
下面是结果
OfficeId | Name | ParentOffice
---------------------------------
1 |Office1 |NULL
2 |Office2 |NULL
3 |Office3 |1
4 |Office4 |3
5 |Office5 |NULL
6 |Office6 |2
相反,我希望得到如下结果
---------------------------------
OfficeId | Name | ParentOffice
---------------------------------
1 |Office1 |NULL
2 |Office2 |NULL
3 |Office3 |Office1
4 |Office4 |Office3
5 |Office5 |NULL
6 |Office6 |Office2
发布于 2019-05-02 14:58:26
我的做法如下:
SELECT
co1.OfficeId,
o1.Name,
o2.Name AS ParentOffice
FROM Offices o1
LEFT JOIN CivilOffices co1
ON o1.OfficeId = co1.OfficeId
LEFT JOIN Offices o2
ON co1.ParentOffice = o2.OfficeId;
我们在CivilOffices
表上执行自连接,以将每条记录与潜在的父级进行匹配。然后,我们对Offices
使用两个单独的连接,以引入办公室名称以及可能的父办公室名称。
发布于 2019-05-02 14:56:04
您将办公室的名称存储在Offices
表中,因此您需要访问与父办公室相关的Offices
记录以获取其名称。
为此,只需使用子查询从Offices
表中提取父办公室的名称。如果您需要来自父办公室的更多字段,那么可以考虑使用left joining
,但是对于单个字段,子查询是直接的。
SELECT O.OfficeId, O.Name
, (select O2.Name from Offices as O2 where O2.OfficeId = CO.ParentOffice) AS ParentOfficeName
FROM Offices AS O
LEFT JOIN CivilOffices AS CO ON O.OfficeId = CO.OfficeId;
发布于 2019-05-02 15:01:39
再添加一个带有offices
表的left join
来连接parent office id
-
SELECT O.OfficeId, O.Name, CO.ParentOffice, O1.name
FROM Offices As O
LEFT JOIN CivilOffices As CO
ON O.OfficeId=CO.OfficeId
LEFT JOIN Offices O1
ON O1.officeid = CO.parentoffice;
https://stackoverflow.com/questions/55947033
复制相似问题