Sql练习1

记录:
要求使用sql将,friends表中的所有id换成名字。
参考了几个解决方案,才写出来

+----+-----------+
| id | name      |
+----+-----------+
|  1 | 曹炜      |
|  2 | 陈健      |
|  3 | 葛丁鹏    |
|  4 | 黄亿冉    |
|  5 | 吉伟桥    |
|  6 | 李克坚    |
|  7 | 李凌峰    |
|  8 | 刘康      |
|  9 | 刘瑗珲    |
| 10 | 裴兴童    |
| 11 | 蒲心原    |
| 12 | 瞿泳      |
| 13 | 孙宇航    |
| 14 | 唐杨漩    |
| 15 | 田旭      |
| 16 | 徐虎      |
| 17 | 许建飞    |
| 18 | 杨靖      |
| 19 | 张朝东    |
| 20 | 张锦乐    |
| 21 | 赵勇智    |
| 22 | 赵宗达    |
| 23 | 朱小宇    |
| 24 | 朱志明    |
| 25 | 陈素珍    |
| 26 | 岳双林    |
| 27 | 苏航      |
| 28 | 秦帅      |
| 29 | 封士光    |
+----+-----------+

mysql> select * from friends;
+----+--------------------------+
| id | friends                  |
+----+--------------------------+
|  1 | 7,12,22,2,18             |
|  2 | 18,15,23,11,3,1,2        |
|  3 | 15,21,8,10,3,27,4,11     |
|  4 | 15,16,25,9,8,28,22,11    |
|  5 | 28,16,2,19,1,24          |
|  6 | 14,4                     |
|  7 | 27                       |
|  8 | 28,19,21,5,17,23,14,24,2 |
|  9 | 6,5,14,15,18,13,22       |
| 10 | 27,25,22,23,2            |
| 11 | 9,24,3,28                |
| 12 | 11,6,18                  |
| 13 | 2,22                     |
| 14 | 22,13,10,25,28           |
| 15 | 24                       |
| 16 | 2,4,7,19,13,21,10,9      |
| 17 | 20                       |
| 18 | 16,20,5,11,21,1,25,12    |
| 19 | 25,4,13,21,17            |
| 20 | 2                        |
| 21 | 27                       |
| 22 | 18                       |
| 24 | 2,7,3,9,15,14,1,17       |
| 25 | 6,7,2,21,16,18,11,9      |
| 26 | 3,1                      |
| 28 | 14,1,3,4                 |
+----+--------------------------+

解决方法:

select name, group_concat(friend separator ',') as friends
from(
        select
            a.id,
            (select u.name from users u where u.id=a.id) as name,
            (select u.name from users u where u.id=substring_index(substring_index(a.friends,',',b.id),',',-1)) as friend
        from friends as a join  users as b on b.id <= (char_length(a.friends) - char_length(replace(a.friends,',',''))+1)
    )A
group by name
order by A.id;

查询结果:

+-----------+-------------------------------------------------------------------------------------+
| name      | friends                                                                             |
+-----------+-------------------------------------------------------------------------------------+
| 曹炜      | 杨靖,瞿泳,陈健,李凌峰,赵宗达                                                        |
| 陈健      | 曹炜,朱小宇,葛丁鹏,田旭,陈健,蒲心原,杨靖                                            |
| 葛丁鹏    | 蒲心原,葛丁鹏,赵勇智,黄亿冉,裴兴童,田旭,苏航,刘康                                   |
| 黄亿冉    | 秦帅,陈素珍,蒲心原,刘康,徐虎,赵宗达,刘瑗珲,田旭                                     |
| 吉伟桥    | 秦帅,朱志明,陈健,曹炜,徐虎,张朝东                                                   |
| 李克坚    | 黄亿冉,唐杨漩                                                                       |
| 李凌峰    | 苏航                                                                                |
| 刘康      | 陈健,朱小宇,赵勇智,朱志明,许建飞,张朝东,唐杨漩,吉伟桥,秦帅                          |
| 刘瑗珲    | 孙宇航,唐杨漩,杨靖,吉伟桥,赵宗达,田旭,李克坚                                        |
| 裴兴童    | 陈健,陈素珍,朱小宇,苏航,赵宗达                                                      |
| 蒲心原    | 葛丁鹏,朱志明,秦帅,刘瑗珲                                                           |
| 瞿泳      | 蒲心原,杨靖,李克坚                                                                  |
| 孙宇航    | 陈健,赵宗达                                                                         |
| 唐杨漩    | 秦帅,孙宇航,陈素珍,赵宗达,裴兴童                                                    |
| 田旭      | 朱志明                                                                              |
| 徐虎      | 刘瑗珲,孙宇航,黄亿冉,裴兴童,张朝东,陈健,赵勇智,李凌峰                               |
| 许建飞    | 张锦乐                                                                              |
| 杨靖      | 瞿泳,赵勇智,张锦乐,陈素珍,蒲心原,徐虎,曹炜,吉伟桥                                   |
| 张朝东    | 孙宇航,许建飞,黄亿冉,赵勇智,陈素珍                                                  |
| 张锦乐    | 陈健                                                                                |
| 赵勇智    | 苏航                                                                                |
| 赵宗达    | 杨靖                                                                                |
| 朱志明    | 唐杨漩,葛丁鹏,许建飞,田旭,李凌峰,曹炜,刘瑗珲,陈健                                   |
| 陈素珍    | 蒲心原,赵勇智,李克坚,杨靖,陈健,刘瑗珲,徐虎,李凌峰                                   |
| 岳双林    | 曹炜,葛丁鹏                                                                         |
| 秦帅      | 葛丁鹏,曹炜,黄亿冉,唐杨漩                                                           |
+-----------+-------------------------------------------------------------------------------------+


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值