[英]Multiple many-to-many relationships in SQL
如何在同一結果集中查詢多個多對多關系?
我有兩個表,通常我總是向左聯接以獲取標准結果集:
tblPROJECTS-
id | jobnumber | jobname ...
--------------------------------------------------
1 | 1000 | Project X
2 | 2000 | Project Y
3 | 3000 | Project Z
tblTASKS-
id | tasknumber | jobnumber | taskname ...
--------------------------------------------------
1 | 10 | 1000 | Project X: Task 1
2 | 20 | 1000 | Project X: Task 2
3 | 30 | 2000 | Project Y: Task 1
任務編號是一個GUID,與作業編號無關,但是永遠不會與多個作業相關。
我在工作號上留下了tblTASKS,因為並非所有項目都將有任務(至今)
但是然后我還有一個所有者表,該表定義了1-n個用戶,這些用戶既擁有整個任務,又擁有各個任務(或兩者兼有)。 每個用戶可以擁有多個作業和/或任務。 數據庫規范的原始設計是使用一個表。
tblOWNERS-
id | ownertype | ownerid | jobnumber | tasknumber ...
----------------------------------------------------------------
1 | 1 | 2 | 1000 |
2 | 1 | 4 | 1000 |
3 | 2 | 2 | | 10
所有者類型1表示用戶擁有整個工作。 所有者類型2表示用戶擁有任務中的任務。
我要構造兩個查詢:
1)與所有關聯的任務所有者一起返回該作業,並與所有關聯的任務所有者一起加入該任務的所有任務。
jobnumber | jobowners | tasknumber | taskowners ...
1000 | 2,4,... | 10 | 2
2000 | | 20 | 4,6,8...
3000 | 4,5,6... | 30 |
2)給定所有者ID,返回與它們關聯的所有作業和/或任務。
困擾我的是同一張表中的多對多。 我能做到嗎? 如果是這樣,我是否正在尋找某種UNION或INTERSECT(我要學習什么)? 或者,如果不是這樣的話,那么這種關系的最佳方案是什么呢?
TIA!
通常,您需要將外鍵放在ERD的多個末端,因此在這種情況下,您可能在表'tblPROJECTS'中有一個名為'ownerid'的字段,並且在tblTASKS中也有'ownerid'的內容。 假設所有任務都有一個工作ID和一個所有者,並且所有項目也都有一個所有者,則可以使用INNER JOINs:
SELECT P.jobnumber,T.tasknumber,O1.id AS taskowner,O2.id AS jobowner
FROM tblTASKS T
INNER JOIN tblPROJECTS P ON P.jobnumber=T.jobnumber
INNER JOIN tblOWNERS O1 ON O1.id=T.ownerid
INNER JOIN tblOWNERS O2 ON O2.id=P.ownerid
WHERE O1.id=1
這不會像您所描述的那樣串聯工作所有者和任務所有者,但是將為每個返回一行,然后您可以在處理結果集的同時串聯它們。
然后,根據需要替換WHERE子句,以獲取給定Job編號的任務列表...
WHERE P.jobnumber=1000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.