tenho os seguintes dados
SQL> SELECT id, relatedIdInASet from tab;
+----+------------------+
| id | relatedIdInASet |
+----+------------------+
| 1 | [12,34,56] |
| 2 | [11,12,22,34] |
+----+------------------+
relatedIdInASet
é text
do tipo até 1024 caracteres, cada linha pode conter uma quantidade diferente de IDs. podemos usar a find_in_set
função nele, mas não podemos indexá-lo... Eu quero normalizar os dados. Eu gostaria de criar uma tabela usando um SQL para desacoplar o conjunto para que resulte:
+----+------------+
| id | relatedId |
|---+-------------+
| 1 | 12 |
| 1 | 34 |
| 1 | 56 |
| 2 | 11 |
| 2 | 12 |
| 2 | 22 |
| 2 | 34 |
+----+------------+
O MySQL não possui uma função de string dividida.
No seu caso, sugiro seguir os passos abaixo.
1.Atualize a tabela da guia removendo o
[
and]
, isso pode ser feito em uma atualização simples:2. Crie uma tabela de números com o comprimento máximo da maior linha da sua tabela, no seu exemplo é 4.
3. Divida a sequência:
Você pode criar a tabela tab2 diretamente:
Todos os passos mencionados podem ser encontrados neste exemplo