Sql 具有查找表和链接表的一对多查询
我当前的测试围绕一个假设数据库展开,该数据库由一个Sql 具有查找表和链接表的一对多查询,sql,sql-server,sql-server-express,Sql,Sql Server,Sql Server Express,我当前的测试围绕一个假设数据库展开,该数据库由一个Person表组成,该表主要由查找表中的ID填充 我还有一个Training表,它还有一个Id链接到课程表。 我创建了一个名为personcontroling的链接表,它通过各自的ID链接Person和Training表 我的目标是返回结果表的查询 我可以创建一个查询,返回Person表,其中所有id都替换为各自的查找表值。本质上这是下面的,相信这是正确的方法吗 Select PersonId, Name, [DepartmentTab
Person
表组成,该表主要由查找表中的ID填充
我还有一个Training
表,它还有一个Id
链接到课程
表。
我创建了一个名为personcontroling
的链接表,它通过各自的ID链接Person
和Training
表
我的目标是返回结果表的查询
我可以创建一个查询,返回Person
表,其中所有id都替换为各自的查找表值。本质上这是下面的,相信这是正确的方法吗
Select
PersonId, Name, [DepartmentTable].Department, [PayTable].Pay
From
[PersonTable]
Left Join
[DepartmentTable] on [PersonTable].DepartmentId = [DepartmentTable]. DepartmentIdLeft
Join
[PayTable] on [PersonTable]. PayId = [PayTable]. PayId
但是,我不知道如何将这些信息连同他们参加的课程名称一起返回
任何帮助都将不胜感激。不完全清楚“培训”和“课程”之间的区别是什么。。。那两张桌子是分开的吗?一对一的关系 但是,假设您希望扩展现有查询,以包括从
Person
到Training
的m:n链接,请尝试以下操作:
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
——很明显,它是一个表,后缀根本没有增加任何附加值。)感谢您的回复,您质疑“培训”和“课程”之间的区别表格,因为它让我意识到有一个错误,我现在已经纠正了图像中的错误。我已经尝试了您建议的解决方案,很抱歉它没有起作用,但这可能是由于我最初的错误。非常感谢这项工作,并对第7行“d.DepartmentIdLeft”进行了一个小的修改,我认为应该改为“d.DepartmentId”