多对多SQL查询

时间:2013-06-14 17:16:32

标签: sql

我有三张桌子: 请求,用户和用户请求。

要求:  - ID   - Submit_ID   - Assign_ID   - Completed_ID

用户:  - ID   - 用户名

UserRequest:  - ID   - Request_ID   - User_ID

每个请求的用户数与提交,分配和完成的请求不同。我正在尝试以下输出:

Request.ID |已分配的用户名|提交的用户名|完成的用户名

我是否会这样做是错误的?

2 个答案:

答案 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的双引号(如果使用其他类型的数据库,则使用不同的字符)。