在MySQL中将一组设置值转换为单个值的列

时间:2016-06-06 01:56:47

标签: mysql sql

我继承了一个表,其中一列是逗号分隔的不同表的主键列表:

id | other_ids | value
---|-----------|-------
1  | a,b,c     | 100
2  | d,e       | 200
3  | f,g       | 3000

我想将此表转换为每个other_id获得自己的列的表:

id | other_id
---|---------
1  | a
1  | b
1  | c
2  | d
2  | e
3  | f
3  | g

但是,我想不出办法做到这一点?

该表是>大小为10 GB,如果可能的话,我想在数据库中执行此操作。

2 个答案:

答案 0 :(得分:3)

第一次发帖,请善待。

试试这个

select id,SUBSTRING_INDEX(other_ids,',',1) as other_id from reverseconcat
UNION
select id,SUBSTRING_INDEX(SUBSTRING_INDEX(other_ids,',',2),',',-1) as other_id from reverseconcat
UNION
select id,SUBSTRING_INDEX(SUBSTRING_INDEX(other_ids,',',3),',',-1) as other_id from reverseconcat

order by id

虽然我真的不值得信任。在http://www.programering.com/a/MzMyUzNwATg.html

上找到了这个

不确定如何使用庞大的数据集。如果other_ids是>您还需要添加更多联合。 3

答案 1 :(得分:2)

如果你有另一张桌子,那么你可以使用joinfind_in_set()

select t.id, ot.pk as other_id
from t join
     othertable ot
     on find_in_set(ot.pk, t.other_ids) > 0;