После того, как я обнаружил, что нет официальной функции разбиения, я решил проблему, используя только MySQL следующим образом:
1: я создал функцию strSplit
CREATE FUNCTION strSplit(x varchar(21845), delim varchar(255), pos int) returns varchar(255)
return replace(
replace(
substring_index(x, delim, pos),
substring_index(x, delim, pos - 1),
''
),
delim,
''
);
Во-вторых, я вставил новые теги в новую таблицу (настоящие имена и столбцы были изменены, чтобы было проще)
INSERT IGNORE INTO tag (SELECT null, strSplit(`Tag`,'|',1) AS T FROM `old_venue` GROUP BY T)
Промыть и повторить увеличение позиции на единицу для каждого столбца (в этом случае у меня было максимум 8 разделителей)
Третий, чтобы получить отношения
INSERT INTO `venue_tag_rel`
(Select a.`venue_id`, b.`tag_id` from `old_venue` a, `tag` b
WHERE
(
a.`Tag` LIKE CONCAT('%|',b.`tag_nm`)
OR a.`Tag` LIKE CONCAT(b.`tag_nm`,'|%')
OR a.`Tag` LIKE CONCAT(CONCAT('%|',b.`tag_nm`),'|%')
OR a.`Tag` LIKE b.`tag_nm`
)
)