我有三张桌子: 请求,用户和用户请求。
要求: - ID - Submit_ID - Assign_ID - Completed_ID
用户: - ID - 用户名
UserRequest: - ID - Request_ID - User_ID
每个请求的用户数与提交,分配和完成的请求不同。我正在尝试以下输出:
Request.ID |已分配的用户名|提交的用户名|完成的用户名
我是否会这样做是错误的?
答案 0 :(得分:1)
没有理解UserRequest的目的,但您的预期输出如下:
SELECT
r.ID,
us.UserName,
ua.UserName,
uc.UserName
FROM
Requests r
JOIN Users us
ON r.Submit_ID = us.ID
JOIN Users ua
ON r.Assign_ID = ua.ID
JOIN Users uc
ON r.Complete_ID = uc.ID
答案 1 :(得分:1)
您可以通过为User表提供每个连接的不同别名来执行您要求的操作(多个一对多连接),如下所示:
SELECT
Requests.ID AS `Request.ID`,
AssignUser.UserName AS `Username of Assigned`,
SubmitUser.UserName AS `Username of Submitted`,
CompleteUser.UserName AS `Username of Completed`
FROM
Requests
JOIN User AS AssignUser ON
Requests.Assign_ID = AssignUser.ID
JOIN User AS SubmitUser ON
Requests.Submit_ID = SubmitUser.ID
JOIN User AS CompleteUser ON
Requests.Completed_ID = CompleteUser.ID
请注意,上面使用了后面的刻度来指定列别名。如果您不使用MySQL,则可能必须使用Oracle的双引号(如果使用其他类型的数据库,则使用不同的字符)。