使用查找表和 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 是 PersonTraining 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 关系?

但假设您想要扩展现有查询以还包括从 PersonTraining 的 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,这个后缀根本没有增加额外的价值..)