我有三个表:Requests、Users 和 UserRequests。
请求: - ID - Submit_ID - Assign_ID - Completed_ID
用户: - ID - 用户名
UserRequest: - ID - Request_ID - User_ID
每个请求都有一个不同的用户,而不是提交、分配和完成的请求。我正在尝试以下输出:
请求.ID | 分配的用户名 | 提交的用户名 | 完成的用户名
我要这样做是错误的方式吗?
我有三个表:Requests、Users 和 UserRequests。
请求: - ID - Submit_ID - Assign_ID - Completed_ID
用户: - ID - 用户名
UserRequest: - ID - Request_ID - User_ID
每个请求都有一个不同的用户,而不是提交、分配和完成的请求。我正在尝试以下输出:
请求.ID | 分配的用户名 | 提交的用户名 | 完成的用户名
我要这样做是错误的方式吗?
不明白 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
您可以通过为 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
Note that the back ticks are used above for specifying the column aliases. If you aren't using MySQL, you would probably have to use double-quotes for Oracle (or a different character if you are using a different kind of database).