JOIN和GROUP_CONCAT有三个表

Pet*_*ter 10 mysql sql join group-concat

我有三张桌子:

users:        sports:           user_sports:

id | name     id | name         id_user | id_sport | pref
---+--------  ---+------------  --------+----------+------
 1 | Peter     1 | Tennis             1 |        1 |    0
 2 | Alice     2 | Football           1 |        2 |    1
 3 | Bob       3 | Basketball         2 |        3 |    0
                                      3 |        1 |    2
                                      3 |        3 |    1
                                      3 |        2 |    0
Run Code Online (Sandbox Code Playgroud)

该表user_sports链接userssports具有优先顺序(pref).

我需要创建一个返回此的查询:

id | name  | sport_ids | sport_names
---+-------+-----------+----------------------------
 1 | Peter | 1,2       | Tennis,Football
 2 | Alice | 3         | Basketball
 3 | Bob   | 2,3,1     | Football,Basketball,Tennis
Run Code Online (Sandbox Code Playgroud)

我尝试过JOIN,GROUP_CONCAT但我得到了奇怪的结果.
我是否需要进行嵌套查询?
有任何想法吗?

Con*_*rix 26

它并不是特别困难.

  1. 使用JOIN子句加入三个表.
  2. 在您感兴趣的字段上使用Group_concat.
  3. 不要忘记你没有连接的字段上的GROUP BY子句,否则会发生奇怪的事情


SELECT u.id, 
       u.Name, 
       Group_concat(us.id_sport order by pref) sport_ids, 
       Group_concat(s.name order by pref)      sport_names 
FROM   users u 
       LEFT JOIN User_Sports us 
               ON u.id = us.id_user 
       LEFT  JOIN sports s 
               ON US.id_sport = s.id 
GROUP  BY u.id, 
          u.Name 
Run Code Online (Sandbox Code Playgroud)

DEMO

当用户根据注释在User_Sports中没有条目时更新 LEFT JOIN