mysql 大量空连接_在MySQL中的空连接上的group_concat

我有以下问题:

我有两张桌子:(简化)

+--------+ +-----------+

| User | | Role |

+--------+ +-----------+

| ID | | ID |

+--------+ | Name |

+-----------+

和M:他们之间的关系

+-------------+

| User_Role |

+-------------+

| User |

| Role |

+-------------+

我需要创建一个视图,它选择我:User,并在一列中,选择他的所有角色(这是由group_concat完成的).

我试过以下:

SELECT u.*, group_concat(r.Name separator ',') as Roles FROM

User u

LEFT JOIN User_Role ur ON ur.User=u.ID

LEFT JOIN Role r ON ur.Role=r.ID

GROUP BY u.ID;

但是,这适用于具有某些已定义角色的用户.没有角色的用户不会被退回.如何修改语句,当用户没有任何角色时,在Roles列中返回带有空字符串的User?

说明:我将SQL数据直接传递给网格,然后网格自行格式化,我创建缓慢而复杂的视图比在我的代码中格式化更容易.

我正在使用MySQL

解决方法:

我已经尝试过你的SQL并且没有pb来运行它,所有行都返回甚至没有角色的用户,唯一的东西就是你没有进入角色列,以避免使用COALESCE函数获取空字符串时该字段将是空值.

SELECT u.*, group_concat(COALESCE(r.Name, "") separator ',') as Roles FROM

User u

LEFT JOIN User_Role ur ON ur.User=u.ID

LEFT JOIN Role r ON ur.Role=r.ID

GROUP BY u.ID;

标签:mysql,join,grouping

来源: https://codeday.me/bug/20190621/1258951.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值