0
假設多個(2個以上)表I具有4個表:MySQL的加入與條件
表1:Task
ID Task Schedule
1 Cut Grass Mon
2 Sweep Floor Fri
3 Wash Dishes Fri
表2:Assigned
ID TaskID (FK) PersonID (FK)
1 1 1
2 1 2
3 2 3
4 3 2
表3:Person
ID Name
1 Tom
2 Dick
3 Harry
表4:Mobile
ID PersonID (FK) CountryCode MobileNumber
1 1 1 555-555-5555
2 2 44 555-555-1234
3 3 81 555-555-5678
4 3 81 555-555-0000
我想在某一天顯示
- 任務
- 分配人姓名的人說: 到任務
- 電話號碼
我覺得應該是像下面這樣,但我也不太清楚如何設置的條件,這樣的結果是正確的限制:
SELECT T.ID, T.Task, P.Name, M.MobileNumber
FROM Task AS T
LEFT JOIN Assigned AS A
ON T.ID = A.TaskID
LEFT JOIN Person AS P
ON A.PersonID = P.ID
LEFT JOIN Mobile AS M
ON M.PersonID = P.ID
WHERE T.Schedule = Fri
我的目標是獲取以下信息(它會顯示不同):
Tasks Name MobileNumber
Sweep Floor, Wash Dishes Dick, Harry 44-555-555-1234, 81-555-555-5678, 81-555-555-0000
當然,如果JOIN是這樣做的錯誤方式,請說出來。
爲什麼內部連接vs外部連接?如果目前沒有人被分配到任務中,這是否意味着我不會得到任何結果? – user928984
然後,您需要在任務分配加入上進行外連接。您可能還需要在人員移動連接上進行外部連接(以吸引沒有手機的人員)。但是對於Assign-Person,內部聯接就足夠了(除非'Assign.PersonID'字段可以爲空。) –
@ypercube謝謝,但是由於可空字段,我最終使用了所有外部聯接。另外,如果有人感興趣,我最終使用了'IFNULL()'和'GROUP_CONCAT'部分。此外,布賴恩阿爾維斯,感謝您使用「GROUP_CONCAT」 – user928984