SQL中group_concat结合distinct时如何为每个值添加单引号包裹
MySQL中使用GROUP_CONCAT生成单引号包裹的去重ID列表
问题原因
之前的写法报错、输出不符合预期,核心是两个语法规则没注意:
GROUP_CONCAT的语法要求DISTINCT关键字必须紧跟函数名,后面直接跟要聚合的字段/表达式,不能在DISTINCT前面插其他参数,所以group_concat(",",distinct(accountId) separator "' ,")会直接触发语法错误- 只要写法顺序正确,
CONCAT和DISTINCT配合不会导致去重失效,之前遇到去重失效基本是把CONCAT写在了DISTINCT外层,写反了顺序。
正确SQL代码
SELECT GROUP_CONCAT( DISTINCT CONCAT('''', accountId, '''') SEPARATOR ',' ) FROM xxx_yyy_replacement_instances WHERE deletedAt IS NULL;
逻辑说明
- MySQL的字符串中,连续两个单引号是转义符号,代表一个实际的单引号字符。
CONCAT('''', accountId, '''')的作用就是给每个accountId值的前后各拼上一个单引号 DISTINCT直接作用在拼接了单引号的accountId结果上,因为单引号是固定的前后缀,和原始accountId一一对应,去重效果和直接对原始accountId去重完全一致- 分隔符直接设置为半角逗号
,,执行后输出的结果就是你需要的格式,每个ID都被单引号包裹,ID之间用逗号分隔,没有多余的空格和错位的引号。
内容的提问来源于stack exchange,提问作者Adi Israel
相关产品推荐
相关产品推荐

