Объединение INNER JOIN и JOIN в SQL - PullRequest
0 голосов
/ 10 октября 2019

Я хочу объединить несколько таблиц в один отчет и мне нужна помощь с подходами "INNER JOIN" и "JOIN". Я ищу результат, аналогичный использованию вызова «UNION», но я хотел бы, чтобы результаты из каждой таблицы отображались в отдельных столбцах, а не в одном столбце. Вот три запроса, которые я хотел бы объединить в одном отчете с (в идеале) четырьмя различными столбцами (Должность, Навыки, Способности, Трудовая деятельность)

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"));

Вот фотографии трех таблиц, которые я будунравится объединять в один отчет / запрос.

Work Activities Skills Abilities Ideal Output

Кто-нибудь может помочь? Я изучаю SQL самостоятельно и не могу понять это. Благодарю.

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Пожалуйста. Рад помочь. Ну, если мой предыдущий ответ был на цели, может быть, это даст то, что вы хотите ...

SELECT j As [Job Title], MAX(s) As Skill, MAX(a) As Ability, MAX(wa) As [Work Activities]
FROM
(SELECT [Job Titles].[Job Title] As j, Null As s, Abilities.Ability As a, Null As wa
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")))
GROUP BY j;
0 голосов
/ 10 октября 2019

Я сомневаюсь, что это даст вам точные результаты, которые вы хотите, но синтаксис похож на то, как я берусь за ваш заявленный сценарий.

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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...