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