#sql #sql-server #sql-server-express
#sql #sql-сервер #sql-server-express
Вопрос:
Мой текущий тест вращается вокруг гипотетической базы данных, состоящей из Person
таблицы, которая преимущественно заполнена идентификаторами из таблиц поиска.
У меня также есть Training
таблица, в которой также есть Id
ссылка на Course
таблицу. Я создал таблицу ссылок PersonTraining
, которая связывает таблицы Person
and Training
через их соответствующие идентификаторы. См. Изображение
Моя цель — запрос, который вернет таблицу результатов.
Я могу создать запрос, который возвращает Person
таблицу со всеми идентификаторами, замененными соответствующими значениями таблицы поиска. По сути, это приведенное ниже, и, надеюсь, это правильный метод?
Select
PersonId, Name, [DepartmentTable].Department, [PayTable].Pay
From
[PersonTable]
Left Join
[DepartmentTable] on [PersonTable].DepartmentId = [DepartmentTable]. DepartmentIdLeft
Join
[PayTable] on [PersonTable]. PayId = [PayTable]. PayId
Однако я не могу понять, как вернуть это вместе с названиями курсов, которые они посещали.
Любая помощь будет высоко оценена
Ответ №1:
Не совсем понятно, в чем разница между «обучением» и «курсом» … это две отдельные таблицы? С отношением 1: 1?
Но если предположить, что вы хотите расширить свой существующий запрос, чтобы также включить ссылку m: n из Person
to Training
— попробуйте это:
Select
p.PersonId, p.Name, d.Department, pay.Pay,
c.CourseName
From
dbo.[PersonTable] p
Left Outer Join
dbo.[DepartmentTable] d on p.DepartmentId = d.DepartmentId
Inner Join
dbo.[PayTable] pay on p.PayId = pay.PayId
-- do a left join to the association table - not every person will have a training
Left Outer Join
dbo.PersonTrainingTable pt on p.PersonId = pt.PersonId
-- do a left join to the training table
Left Outer Join
dbo.TrainingTable t on pt.TrainingId = t.TrainingId
Left Outer Join
dbo.CourseTable c on t.CourseId = c.CourseId
Обновлено: добавлено CourseTable
и обязательно использовало имеющиеся у вас имена (но почему вы вызываете каждую таблицу AbcTable
— ясно, что это таблица, этот суффикс не добавляет никакого дополнительного значения вообще ..)
Комментарии:
1. Спасибо за ваш ответ, и вы задаете вопрос о разнице между таблицами «Обучение» и «Курс», поскольку это заставило меня понять, что произошла ошибка, которую я сейчас исправил в изображении. Я попробовал предложенное вами решение и сожалею, что оно не сработало, но это, вероятно, связано с моей первоначальной ошибкой.
2. Очень ценится, что это работает с одной незначительной поправкой Строка 7 «d.DepartmentIdLeft», я полагаю, должна читать «d.DepartmentID»