Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

93
Visualizações
Cómo crear nuevos registros a partir de un campo concatenado en una tabla MySQL

Tengo una tabla 'Casos' con un campo de cadena de campo llamado 'Etiquetas', que contiene etiquetas separadas por | personaje:

Casos

 +----+-------------------+ | Id | Tags | +----+-------------------+ | 12 | "car|plane|truck" | | 11 | "plane" | +----+-------------------+

y me gustaría crear una nueva tabla para mapear estas etiquetas de la siguiente manera:

Etiquetas

 +----+---------+-------+ | Id | case_id | tag | +----+---------+-------+ | 1 | 12 | car | | 2 | 12 | plane | | 3 | 12 | truck | | 4 | 11 | plane | +----+---------+-------+

¿Cómo escribo una declaración sql para crear cada registro en la tabla como se describe arriba?

¡Gracias!

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

La solución es un poco complicada:

 set @id = 0; select @id:=(@id + 1) as id, id as case_id, JSON_UNQUOTE( JSON_EXTRACT( CONCAT('["', REPLACE(tags, '|', '", "'), '"]'), -- format string as JSIN array CONCAT('$[',pos,']') ) ) tag from Tags join JSON_TABLE( -- join series pseudo table "[0,1,2,3]", -- this array length must be equal max tag elements length "$[*]" COLUMNS(pos varchar(255) PATH '$') ) as seq on seq.pos<JSON_LENGTH(CONCAT('["', REPLACE(tags, '|', '", "'), '"]')) ;

Ejemplo de DB Fiddle

 id case_id tag 1 11 plane 2 12 car 3 12 plane 4 12 truck

PD Esta solución solo para MySQL 8

over 4 years ago · Santiago Trujillo Relatório

0

Creo que un CTE recursivo es una forma simple de resolver esto:

 with recursive cte as ( select id, concat(tag, '|') as rest, cast(null as char(255)) as tag, 1 as lev from tags union all select id, substr(rest, instr(rest, '|') + 1), substring_index(rest, '|', 1), lev + 1 from cte where rest <> '' ) select id, tag from cte where lev > 1;

Aquí hay un db<>fiddle.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda