我有一个名为tableA
的表,并且id字段可能在一条记录中用逗号存储值。
当我使用sql:“从tableA中选择ID”时,将得到以下结果。
我不知道如何将行记录分成几行,如下所示:
27
19
7
18
...
对sql脚本有什么提示吗?谢谢。
答案 0 :(得分:0)
我不确定没有更好的方法,但是也许这样的事情是一个很好的起点:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(tablea.id, ',', numbers.row), ',', -1)
FROM
tablea INNER JOIN
-- This numbers subquery is taken from @Unreason's answer in https://stackoverflow.com/questions/304461/generate-an-integer-sequence-in-mysql
(
SELECT @row := @row + 1 AS row FROM
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2,
(SELECT @row:=0) n) numbers
on numbers.row <= LENGTH(tablea.id)-LENGTH(REPLACE(tablea.id, ',', ''))+1
给出tablea.id = '27,19,8',SUBSTRING_INDEX(SUBSTRING_INDEX(tablea.id, ',', 1), ',', -1)
将返回第一个元素(27),SUBSTRING_INDEX(SUBSTRING_INDEX(tablea.id, ',', 2), ',', -1)
将返回第二个元素(19),依此类推。>
因此,我将其与数字列表结合在一起(在这种情况下,我的列表最多为100,因此我假设单个tablea.id字段的逗号分隔值永远不会超过100,尽管可以更改详细信息) 。连接条件使用LENGTH(tablea.id)-LENGTH(REPLACE(tablea.id, ',', ''))+1
,它是字段中用逗号分隔的值的计数。
这里有db fiddle可以一起玩。