使用查找表和 link 表的一对多查询
One-to-many query with lookup and link tables
我当前的测试围绕一个假设的数据库展开,该数据库由一个 Person
table 组成,该数据库主要由查找 table 中的 ID 填充。
我还有一个 Training
table,还有一个 Id
link 到 Course
table。
我创建了一个名为 PersonTraining
的 link table,通过它们各自的 ID,link 是 Person
和 Training
table。 See Image
我的 objective 是一个查询,它将 return 结果 table。
我可以创建一个查询,其中 return 将 Person
table 的所有 ID 替换为各自的查找 table 值。本质上就是下面的内容,请相信这是正确的方法?
Select
PersonId, Name, [DepartmentTable].Department, [PayTable].Pay
From
[PersonTable]
Left Join
[DepartmentTable] on [PersonTable].DepartmentId = [DepartmentTable]. DepartmentIdLeft
Join
[PayTable] on [PersonTable]. PayId = [PayTable]. PayId
但是我无法弄清楚如何 return 这连同他们参加的课程名称。
如有任何帮助,我们将不胜感激
不完全清楚“培训”和“课程”之间的区别是什么……这两个 table 是分开的吗?有 1:1 关系?
但假设您想要扩展现有查询以还包括从 Person
到 Training
的 m:n link - 试试这个:
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
并确保使用您拥有的名称(但是 为什么 您要调用每个名称table AbcTable
- 很明显这是一个 table,这个后缀根本没有增加额外的价值..)
我当前的测试围绕一个假设的数据库展开,该数据库由一个 Person
table 组成,该数据库主要由查找 table 中的 ID 填充。
我还有一个 Training
table,还有一个 Id
link 到 Course
table。
我创建了一个名为 PersonTraining
的 link table,通过它们各自的 ID,link 是 Person
和 Training
table。 See Image
我的 objective 是一个查询,它将 return 结果 table。
我可以创建一个查询,其中 return 将 Person
table 的所有 ID 替换为各自的查找 table 值。本质上就是下面的内容,请相信这是正确的方法?
Select
PersonId, Name, [DepartmentTable].Department, [PayTable].Pay
From
[PersonTable]
Left Join
[DepartmentTable] on [PersonTable].DepartmentId = [DepartmentTable]. DepartmentIdLeft
Join
[PayTable] on [PersonTable]. PayId = [PayTable]. PayId
但是我无法弄清楚如何 return 这连同他们参加的课程名称。
如有任何帮助,我们将不胜感激
不完全清楚“培训”和“课程”之间的区别是什么……这两个 table 是分开的吗?有 1:1 关系?
但假设您想要扩展现有查询以还包括从 Person
到 Training
的 m:n link - 试试这个:
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
并确保使用您拥有的名称(但是 为什么 您要调用每个名称table AbcTable
- 很明显这是一个 table,这个后缀根本没有增加额外的价值..)