如何将多行中的列合并为一个字符串
How to merge a column from multiple rows into a single string
我有一个有 2 行的 table 现在我想合并这些行并得到一个字符串。像这样 'santhosh,santhosh'
我检查了一些建议使用 COALESCE 的例子,试过这样
set @col = '';
SELECT @col = COALESCE(@col + ',', '') + name into @col
FROM cricketers limit 20;
select @col;
但是我一直没有得到预期的结果,我应该怎么实现,我是运行这个里面的一个程序。我想使用变量@col 来做这样的查询
select * from table where id in (@col)
如果我没有遵循正确的流程,请提出建议。
- Coalesce 只允许用另一个值替换 NULL。它不能解决你的任务。
+
不连接字符串,它只是算术加法运算符。
- 如果您需要将很多行的值连接成单个值,那么您应该使用
GROUP BY
(可能是隐式的)和 GROUP_CONCAT()
:
SELECT GROUP_CONCAT([DISTINCT] name [ORDER BY name])
FROM cricketers;
如果您不需要删除重复项,请删除 DISTINCT
。
如果您需要限制连接值的数量,那么您可以通过以下方式连接然后删除多余的值:
SELECT SUBSTRING_INDEX(GROUP_CONCAT([DISTINCT] name [ORDER BY name]), ',', 20)
FROM cricketers;
或select子查询中需要的行数:
SELECT GROUP_CONCAT(name [ORDER BY name])
FROM ( SELECT [DISTINCT] name
FROM cricketers
[ORDER BY name]
LIMIT 20 ) subquery;
强烈建议存在 ORDER BY
表达式 - 如果没有它们,您将收到不确定的值排序(并且在数量限制的情况下 - 它们的 selection)。
我有一个有 2 行的 table
我检查了一些建议使用 COALESCE 的例子,试过这样
set @col = '';
SELECT @col = COALESCE(@col + ',', '') + name into @col
FROM cricketers limit 20;
select @col;
但是我一直没有得到预期的结果,我应该怎么实现,我是运行这个里面的一个程序。我想使用变量@col 来做这样的查询
select * from table where id in (@col)
如果我没有遵循正确的流程,请提出建议。
- Coalesce 只允许用另一个值替换 NULL。它不能解决你的任务。
+
不连接字符串,它只是算术加法运算符。- 如果您需要将很多行的值连接成单个值,那么您应该使用
GROUP BY
(可能是隐式的)和GROUP_CONCAT()
:
SELECT GROUP_CONCAT([DISTINCT] name [ORDER BY name])
FROM cricketers;
如果您不需要删除重复项,请删除 DISTINCT
。
如果您需要限制连接值的数量,那么您可以通过以下方式连接然后删除多余的值:
SELECT SUBSTRING_INDEX(GROUP_CONCAT([DISTINCT] name [ORDER BY name]), ',', 20)
FROM cricketers;
或select子查询中需要的行数:
SELECT GROUP_CONCAT(name [ORDER BY name])
FROM ( SELECT [DISTINCT] name
FROM cricketers
[ORDER BY name]
LIMIT 20 ) subquery;
强烈建议存在 ORDER BY
表达式 - 如果没有它们,您将收到不确定的值排序(并且在数量限制的情况下 - 它们的 selection)。