我继承了一个表,其中一列是逗号分隔的不同表的主键列表:
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,如果可能的话,我想在数据库中执行此操作。
答案 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)
如果你有另一张桌子,那么你可以使用join
和find_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;