我正在尝试从两个表中获取和联接来自SQL Server的信息。
假设我有这两个表:
表Resources
:
ID Resource
---------------
1 Alex
2 Dennis
3 Diane
表Projects
:
Project Manager Leader Engineer
------------------------------------------
pro_18001 1 2 3
我想得到以下结果:
Project Manager Leader Engineer
---------------------------------------------
pro_18001 Alex Dennis Diane
我认为SQL查询应该类似于:
SELECT
[Projects].[Project]
[Resources].[Resource]
[Resources].[Resource]
[Resources].[Resource]
FROM
[Projects]
LEFT JOIN
[Resources] ON
[Projects].[Manager] = [Resources].[ID] AND
[Projects].[Leader] = [Resources].[ID] AND
[Projects].[Engineer] = [Resources].[ID]
WHERE
[Project].[Projects] = 'pro_18001'
但是我确定下面的部分是不正确的,因为同一列有3次,并且联接可能无法以正确的顺序选择正确的列...
SELECT
[Projects].[Project]
[Resources].[Resource]
[Resources].[Resource]
[Resources].[Resource]
那么如何在正确的位置多次连接同一列?
答案 0 :(得分:7)
您需要为每个列添加左连接3,而不是1:
SELECT
[Projects].[Project],
Manager.[Resource] AS Manager,
Leader.[Resource] AS Leader,
Engineer.[Resource] AS Engineer
FROM [Projects]
LEFT JOIN [Resources] Manager
ON [Projects].[Manager] = Manager.[ID]
LEFT JOIN [Resources] Leader
ON [Projects].[Leader] = Leader.[ID]
LEFT JOIN [Resources] Engineer
ON [Projects].[Engineer] = Engineer.[ID]
WHERE [Project].[Projects] = 'pro_18001'
答案 1 :(得分:1)
您可以尝试以下查询查询所需的结果
create table #Resources (Id int, Resources Varchar(20))
insert into #Resources
values(1, 'Alex'), (2, 'Dennis'), ('3', 'Diane')
Create table #Projects (Project Varchar(20), Manager INT, Leader INT, Engineer INT)
insert into #Projects Values ('pro_18001', 1, 2, 3)
SELECT #Projects.Project,Manager.Resources as Manager,Leader.Resources as Leader, Engineer.Resources as Engineer FROM #Projects
INNER JOIN #Resources as Manager on #Projects.Manager = Manager.Id
INNER JOIN #Resources as Leader on #Projects.Leader = Leader.Id
INNER JOIN #Resources as Engineer on #Projects.Engineer = Engineer.Id
DROP TABLE #Resources
DROP TABLE #Projects
输出如下
Project Manager Leader Engineer
pro_18001 Alex Dennis Diane
希望这会对您有所帮助。
答案 2 :(得分:1)
SELECT
p.project_name,
r.name AS manager,
r1.name AS leader,
r2.name AS enginener
FROM
projects p
INNER JOIN resources r ON
p.manager = r.id
INNER JOIN resources r1 ON
p.leader = r1.id
INNER JOIN resources r2 ON
p.engineer = r2.id