我目前正在使用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