sql >> Databasteknik >  >> RDS >> Mysql

mySQL>> Normalisering av ett kommaavgränsat fält

Kopiera din kod till själva inlägget och ange koden du har försökt använda för att lösa problemet.

Funktionen substring_index returnerar en del av en sträng med någon avgränsare (här ett kommatecken), och när ett negativt index skickas börjar den söka efter matchningar från den motsatta sidan, så -1 tar ett objekt från vad som annars skulle vara listor med flera objekt (för index>=2).

Enligt vår diskussion har jag justerat hur jag gjorde detta och visade ett exempel på hur jag använder automatisk ökning. (Detta körs i 'byggschema'-delen av 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;

dokumentation av delsträngsfunktionen Möjlig dubblering av denna fråga



  1. Avsluta MySQL utan att den startar om på El Capitan

  2. SQL SELECT ORDER BY flera kolumner beroende på värdet för den andra kolumnen

  3. Pyodbc - Datakällans namn hittades inte och ingen standarddrivrutin har angetts

  4. Ihållande vs icke-beständig – vilket ska jag använda?