我目前正在使用SQL Server 2012上的T-SQL进行选择查询。这是一个复杂的查询,我想查询3个表中的列表。结果应该是这个样子:T-SQL Select加入3个表
所需的输出:
ProjectId | Title | Manager | Contact | StatusId
----------+-------------+-----------+-----------+-----------
1 | projectX | 1123 | 4453 | 1
2 | projectY | 2245 | 5567 | 1
3 | projectZ | 3335 | 8899 | 1
我的3个表:
1)项目:专案编号,ProjectDataId,MemberVersionId
2)ProjectData的: ProjectDataId,Title,StatusId
3)成员: MemberId,MemberVersionId,MemberTypeId,Emp loyeeId
棘手的部分是,要实现版本控制。因此,随着时间的推移,项目成员可以改变,并且始终可以回到以前的版本,这就是为什么我使用MemberVersionId作为外键项目和成员。表Project和ProjectData与ProjectDataId链接。
因此,1个项目有1个OfferData和1个项目有N个成员。
某些样本数据:
项目
ProjectId | ProjectDataId | MemberVersionId |
----------+---------------+-----------------+
1 | 2 | 1 |
2 | 3 | 1 |
3 | 4 | 1 |
ProjectData的
ProjectDataId | Title | StatusId
--------------+-------------+-----------
2 | projectX | 1
3 | projectY | 1
4 | projectZ | 1
成员: MemberTypeId 1 =管理器,MemberTypeId 2 =端子,3 =其他
MemberId | MemberVersionId | MemberTypeId | EmployeeId |
---------+-----------------+--------------+------------+
1 | 1 | 1 | 1123 |
2 | 1 | 2 | 4453 |
3 | 1 | 3 | 9999 |
4 | 2 | 1 | 2245 |
5 | 2 | 2 | 5567 |
6 | 2 | 3 | 9999 |
7 | 3 | 1 | 3335 |
8 | 3 | 2 | 8899 |
9 | 3 | 3 | 9999 |
我当前的查询看起来是这样的:
SELECT ProjectId, Title, EmployeeId AS Manager, EmployeeId AS Contact, StatusId
FROM [MySchema].[Project] a,
[MySchema].[ProjectData] b,
[MySchema].[Members] c
WHERE a.ProjectDataId = b.ProjectDataId
AND a.MemberVersionId = c.MemberVersionId
不幸的是这并没有工作。你知道如何解决这个问题吗?
感谢
添加所需的输出 – 2017-04-21 08:51:26
今天提示:切换到现代的,明确的'JOIN'语法!易于编写(没有错误),更容易读取维护,并且在需要时更容易转换为外部连接! – jarlh