JOIN and GROUP_CONCAT with three tables(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
表格 user_sports
将 users
和 sports
与偏好顺序 (pref
) 联系起来.
The table user_sports
links users
and sports
with an order of preference (pref
).
我需要做一个返回这个的查询:
I need to make a query that returns this:
id | name | sport_ids | sport_names
---+-------+-----------+----------------------------
1 | Peter | 1,2 | Tennis,Football
2 | Alice | 3 | Basketball
3 | Bob | 2,3,1 | Football,Basketball,Tennis
我尝试过 JOIN
和 GROUP_CONCAT
,但结果很奇怪.
我需要进行嵌套查询吗?
有什么想法吗?
I have tried with JOIN
and GROUP_CONCAT
but I get weird results.
Do I need to do a nested query?
Any ideas?
推荐答案
并不是特别困难.
- 使用 JOIN 子句连接三个表.
- 在您感兴趣的领域使用 Group_concat.
- 不要忘记未连接的字段上的 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
演示
更新 LEFT JOIN 用于当用户根据评论在 User_Sports 中没有条目时
Update LEFT JOIN for when the user doesn't have entries in User_Sports as per comments
这篇关于JOIN 和 GROUP_CONCAT 与三个表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:JOIN 和 GROUP_CONCAT 与三个表
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- SQL 临时表问题 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01