現在、SQL Server 2012のT-SQLで選択クエリを処理しています。複雑なクエリです。3つのテーブルからリストをクエリします。T-SQL結合3テーブルを選択します。
所望の出力:
ProjectId | Title | Manager | Contact | StatusId
----------+-------------+-----------+-----------+-----------
1 | projectX | 1123 | 4453 | 1
2 | projectY | 2245 | 5567 | 1
3 | projectZ | 3335 | 8899 | 1
マイ3つのテーブル:
1)プロジェクト: PROJECTID、ProjectDataId、MemberVersionId
2)ProjectData:結果は次のようになります。 ProjectDataId、Title、StatusId
3)メンバー: MemberId、MemberVersionId、MemberTypeId、Emp loyeeId
トリッキーな部分は、バージョン管理を実装することです。したがって、プロジェクトメンバーは変更することができ、いつも以前のバージョンに戻ることができるはずです。そのため、MemberVersionIdをプロジェクトとメンバーの間で外部キーとして使用しています。 ProjectDataIdにリンクされたテーブルProjectとProjectData。
したがって、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 =連絡先、3MemberId | 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
残念ながら、これはまだ動作しません。あなたはこの問題を解決する方法を知っていますか?
おかげ
希望の出力を追加 –
今日のヒント:現代的で明示的な 'JOIN'構文に切り替えてください!書き込みが簡単(エラーなし)、メンテナンスを読みやすく、必要に応じて外部結合に変換しやすくなりました。 – jarlh