1

次のテーブルがあります

table "users"
------------------------------
user_id    name    email
------------------------------
1          joe     joe@doe.com
2          jane    jane@doe.com
3          john    john@doe.com

table "code_to_user_ref"
---------------------------------
ref_id    user_id    code_id
---------------------------------
1         1          1
2         1          2
3         2          3
4         3          4

table "codes"
------------------
code_id    code    
------------------
1          xC1@3$
2          Cv@3$5
3          Vb#4%6
4          Bn%6&8

基本的に、usersテーブルは私の登録メンバー全員がいる場所です。このcodes表は、外部で使用できる有効なアクティベーション コードのリストです。テーブルは、code_to_user_ref各ユーザーが所有するコードにマップします。

私がやりたいのは、次のようにテーブルをエコーすることです:

------------------------------
Name    Email     Code/s owned
------------------------------
joe     joe@...   xC1@3$, Cv@3$5
jane    jane@...  Vb#4%6
john    john@...  Bn%6&8

そのようなクエリをどのように書き出すのでしょうか?

4

3 に答える 3

6

試す:

    SELECT a.name,a.email, GROUP_CONCAT(c.code)
      FROM users a 
      JOIN code_to_user_ref b ON a.user_id = b.user_id
      JOIN codes c ON b.code_id = c.code_id 
  GROUP BY a.name,a.email

結果は次のようになります。

| NAME |        EMAIL |  CODE/S OWNED |
|------|--------------|---------------|
| jane | jane@doe.com |        Vb#4%6 |
|  joe |  joe@doe.com | Cv@3$5,xC1@3$ |
| john | john@doe.com |        Bn%6&8 |

これがSQLFiddleです。

于 2013-10-24T06:19:36.130 に答える
3

このようにしてみてください

SELECT A.Name,A.Email,GROUP_CONCAT(C.code) AS Codes owned
        FROM  users A,code_to_user_ref B,codes C
        WHERE A.user_id = B.user_id 
        AND B.code_id=C.code_id
GROUP BY A.user_id
于 2013-10-24T06:17:00.600 に答える
0
SELECT 
   Name,
   Email,
   (SELECT GROUP_CONCAT(code) FROM codes co 
        WHERE code_id in (SELECT code_id FROM code_to_user_ref c 
                              WHERE c.user_id=u.user_id) 
   GROUP BY co.user_id) AS Codes owned
FROM  users u
于 2013-10-24T06:26:53.507 に答える