sql >> Base de Datos >  >> RDS >> Mysql

mySQL>> Normalizando un campo delimitado por comas

Copie su código en la publicación real y proporcione el código que intentó usar para resolver el problema.

La función substring_index devuelve una parte de una cadena con algún delimitador (aquí una coma), y cuando se pasa un índice negativo, comienza a buscar coincidencias desde el lado opuesto, por lo que -1 toma un elemento de lo que de otro modo serían listas de elementos múltiples (para índice>=2).

Según nuestra discusión, modifiqué cómo hice esto y mostré un ejemplo del uso del incremento automático. (Esto se ejecuta en la parte 'compilar esquema' de fiddle).

create table TAGS
(`T_ID` int auto_increment primary key, `T_Name` varchar(18))
;

insert ignore into TAGS (T_Name)
  SELECT 
    SUBSTRING_INDEX(RES_Tags, ',', 1) as X
    FROM RESOURCES
;

insert ignore into TAGS (T_Name)
  SELECT 
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(RES_Tags, ',', 2)
      ,',',-1)
  FROM RESOURCES
;

insert ignore into TAGS (T_Name)
  SELECT 
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(RES_Tags, ',', 3)
      ,',',-1)  as X
  FROM RESOURCES
;
insert ignore into TAGS (T_Name)
  SELECT 
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(RES_Tags, ',', 4)
      ,',',-1)  as X
  FROM RESOURCES
  ;

insert ignore into TAGS (T_Name)
  SELECT 
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(RES_Tags, ',', 5)
      ,',',-1)  as X
  FROM RESOURCES
;

insert ignore into TAGS (T_Name)
  SELECT 
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(RES_Tags, ',', 6)
      ,',',-1)  as X
  FROM RESOURCES
;

create table New_TAGS like TAGS;
insert into New_TAGS (T_Name)
  select distinct trim(T_Name)
  from TAGS;

drop table TAGS;
rename table NEW_TAGS to TAGS;

documentación de la función de subcadena Posible duplicación de esta pregunta