Reputation: 213
I'm trying to get and join information from a SQL Server from two tables.
Let's say I have these two tables:
Table Resources
:
ID Resource
---------------
1 Alex
2 Dennis
3 Diane
Table Projects
:
Project Manager Leader Engineer
------------------------------------------
pro_18001 1 2 3
I want to get the following result:
Project Manager Leader Engineer
---------------------------------------------
pro_18001 Alex Dennis Diane
I suppose the SQL query should look something like:
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'
But I'm sure the below part is not right as there is 3 times the same column and the join might not pick the right ones in the right order...
SELECT
[Projects].[Project]
[Resources].[Resource]
[Resources].[Resource]
[Resources].[Resource]
So how to join the same column multiple times in the right place?
Upvotes: 0
Views: 3056
Reputation: 39
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
Upvotes: 2
Reputation: 866
you need to add the left join 3 instead of 1 for each column:
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'
Upvotes: 7
Reputation: 5653
You can try the below query for your required result
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
The output is as follows
Project Manager Leader Engineer
pro_18001 Alex Dennis Diane
Hope this will help you.
Upvotes: 1