我有两个这样的表:
表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
答案 0 :(得分:0)
您将办公室的名称存储在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;
答案 1 :(得分:0)
我将按以下方式进行处理:
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
使用两个单独的联接,以引入办公室名称以及可能存在的父办公室名称。
答案 2 :(得分:0)
通过left join
表再添加一个offices
与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;
答案 3 :(得分:0)
SELECT o.OfficeId
, o.Name
, c.ParentOffice
FROM Offices o
INNER JOIN CivilOffices co ON O.OfficeId = CO.OfficeId
OUTER APPLY
(
SELECT o1.Name AS ParentOfficeName
, co1.ParentOffice
FROM Offices o1
INNER JOIN CivilOffices co1 ON O.OfficeId = CO.ParentOffice
WHERE O.OfficeId = CO1.ParentOffice
) c