2011-06-10 62 views
3

我有三列我需要加入其中来自3个不同的表,LEFT JOIN 3列,以获取用户名

捐款表:

+-----------+---------------------+ 
| record_id | contributor_user_id | 
+-----------+---------------------+ 
|   1 |     2 | 
+-----------+---------------------+ 
|   1 |     5 | 
+-----------+---------------------+ 

成员表:

+--------------+---------+ 
| username  | user_id | 
+--------------+---------+ 
| Test   |  1 | 
+--------------+---------+ 
| Test2  |  5 | 
+--------------+---------+ 
| Test3  |  6 | 
+--------------+---------+ 

记录表格:

+---------+-----------+ 
| user_id | record_id | 
+---------+-----------+ 
|  28 |   1 | 
+---------+-----------+ 

为了什么我需要返回用于显示记录所有人的usernameuser_id。此外,显示usernameuser_id,但这可以是多个(超过1+个用户)。我试过这个:

SELECT usr.username, 
     usr.user_id, 
     rec.record_id, 
     contrib.record_id, 
     contrib.contributor_user_id 
FROM 
(
    records rec 

    INNER JOIN members usr ON rec.user_id = usr.user_id 

    # this returns records as NULL 
    LEFT OUTER JOIN contributions contrib ON rec.record_id = contrib.record_id AND contrib.contributor_user_id = usr.user_id 

    # this works, but I need the username to be displayed too 
    LEFT OUTER JOIN contributions contrib ON rec.record_id = contrib.record_id 
) 
WHERE rec.record_id = 1 
+1

我认为你需要为给定的样本数据,或者你想拉什么更好的解释提供样品输出.. – Fosco 2011-06-10 13:26:27

回答

3

尝试将贡献用户的连接嵌套到左连接的贡献中。

SELECT u.username, u.user_id, r.record_id, u2.username as ContributorName, u2.user_id as ContributorId 
    FROM records r 
     INNER JOIN members u 
      ON r.user_id = u.user_id 
     LEFT JOIN contributions c 
      INNER JOIN members u2 
       ON c.contributor_user_id = u2.user_id 
      ON r.record_id = c.record_id 
    WHERE r.record_id = 1 
0
SELECT 
     usr.username    AS record_owner 
    , usr.user_id    AS record_owner_id 
    , rec.record_id 
    , con.contributor_user_id AS contributor_id 
    , contributors.username AS contributor_name 
FROM 
    records rec 
     INNER JOIN 
    members usr 
      ON rec.user_id = usr.user_id 
     LEFT OUTER JOIN 
    contributions con 
      ON rec.record_id = con.record_id 
     INNER JOIN 
    members contributors 
      ON con.contributor_user_id = contributors.user_id 
WHERE 
    rec.record_id = 1