Search code examples
sqlms-accessjoininner-join

Combining INNER JOIN and JOIN in SQL


I'm looking to join multiple tables into one report and need help with my "INNER JOIN" and "JOIN" approach. I'm looking for a result similar to using the "UNION" call but I would like the results from each table to display in separate columns rather than all in one column. Here are the 3 queries I would like to join into one report with (ideally) 4 distinct columns (Job Title, Skills, Abilities, Work Activities)

SELECT [Job Titles].[Job Title], Abilities.Ability
FROM (Departments INNER JOIN [Job Titles] ON Departments.DepartmentID = [Job Titles].[Department]) INNER JOIN (Abilities INNER JOIN [Department/Ability] ON Abilities.AbilityID = [Department/Ability].Ability) ON (Departments.DepartmentID = [Department/Ability].Department) AND (Departments.DepartmentID = [Department/Ability].Department)
WHERE ((([Job Titles].[Job Title])="President"));

SELECT [Job Titles].[Job Title], Skills.Skill
FROM Skills INNER JOIN ((Departments INNER JOIN [Job Titles] ON Departments.DepartmentID = [Job Titles].[Department]) INNER JOIN [Department/Skills] ON Departments.DepartmentID = [Department/Skills].Department) ON Skills.SkillID = [Department/Skills].Skills
WHERE ((([Job Titles].[Job Title])="President"));

SELECT [Job Titles].[Job Title], [Work Activities].[Work Activities]
FROM Employees INNER JOIN ([Work Activities] INNER JOIN (([Job Titles] INNER JOIN [Employee/JobTitle] ON [Job Titles].JobTitleID = [Employee/JobTitle].[Job Title]) INNER JOIN [JobTitles/WorkActivities] ON [Job Titles].JobTitleID = [JobTitles/WorkActivities].[Job Title]) ON [Work Activities].[Work ActivitiesID] = [JobTitles/WorkActivities].[Work Activity]) ON Employees.WorkerID = [Employee/JobTitle].Employee
GROUP BY [Job Titles].[Job Title], [Work Activities].[Work Activities]
HAVING ((([Job Titles].[Job Title])="President"));

Here are photos of the three tables I'll like to combine into one report/query.

Work Activities Skills Abilities Ideal Output

Anyone can help? I'm learning SQL on my own and cannot figure this one out. Thanks.


Solution

  • I doubt this will give you the exact results you want, but the syntax is similar to how I tackle your stated scenario.

    SELECT [Job Titles].[Job Title], Null As Skill, Abilities.Ability, Null As [Work Activities]
    FROM (Departments INNER JOIN [Job Titles] ON Departments.DepartmentID = [Job Titles].[Department]) INNER JOIN (Abilities INNER JOIN [Department/Ability] ON Abilities.AbilityID = [Department/Ability].Ability) ON (Departments.DepartmentID = [Department/Ability].Department) AND (Departments.DepartmentID = [Department/Ability].Department)
    WHERE ((([Job Titles].[Job Title])="President"))
    UNION
    SELECT [Job Titles].[Job Title], Skills.Skill, Null Null
    FROM Skills INNER JOIN ((Departments INNER JOIN [Job Titles] ON Departments.DepartmentID = [Job Titles].[Department]) INNER JOIN [Department/Skills] ON Departments.DepartmentID = [Department/Skills].Department) ON Skills.SkillID = [Department/Skills].Skills
    WHERE ((([Job Titles].[Job Title])="President"))
    UNION
    SELECT [Job Titles].[Job Title], Null, Null, [Work Activities].[Work Activities]
    FROM Employees INNER JOIN ([Work Activities] INNER JOIN (([Job Titles] INNER JOIN [Employee/JobTitle] ON [Job Titles].JobTitleID = [Employee/JobTitle].[Job Title]) INNER JOIN [JobTitles/WorkActivities] ON [Job Titles].JobTitleID = [JobTitles/WorkActivities].[Job Title]) ON [Work Activities].[Work ActivitiesID] = [JobTitles/WorkActivities].[Work Activity]) ON Employees.WorkerID = [Employee/JobTitle].Employee
    GROUP BY [Job Titles].[Job Title], [Work Activities].[Work Activities]
    HAVING ((([Job Titles].[Job Title])="President"));