MySQL如何将符合条件的多条记录单字段拼接存入变量?
MySQL 拼接满足条件字段值到变量的正确写法
场景说明
现有table_A表结构及数据如下:
| Transnumber | lpost |
|---|---|
| A001 | 0 |
| A002 | 1 |
| A003 | 1 |
| A004 | 1 |
| A005 | 0 |
| A006 | 1 |
需要将满足lpost=0条件的Transnumber值拼接为逗号分隔的字符串,存入变量@var1,预期结果为@var1 = 'A001,A005'。
问题分析
你尝试的MySQL写法无法正常工作,原因是:当查询返回多行结果时,INTO子句无法直接处理多行赋值,且初始空值拼接时会出现多余分隔符的问题。
正确写法
方法1:使用用户变量累加拼接
这种方式模拟SQL Server的变量累加逻辑,同时处理初始空值避免多余逗号:
SET @var1 = ''; SELECT @var1 := CONCAT(@var1, IF(@var1 = '', '', ','), Transnumber) FROM table_A WHERE lpost = 0;
方法2:使用MySQL内置GROUP_CONCAT函数(推荐)
MySQL提供了专门用于字符串分组拼接的GROUP_CONCAT函数,语法更简洁高效:
-- 默认用逗号分隔,可省略SEPARATOR参数 SELECT GROUP_CONCAT(Transnumber) INTO @var1 FROM table_A WHERE lpost = 0; -- 若需指定分隔符,可显式声明 SELECT GROUP_CONCAT(Transnumber SEPARATOR ',') INTO @var1 FROM table_A WHERE lpost = 0;
执行后可通过以下语句验证结果:
SELECT @var1;
内容的提问来源于stack exchange,提问作者Nugroho Moristianto
相关产品推荐
相关产品推荐

