sql >> Database >  >> RDS >> Mysql

mySQL>> Normaliseren van een door komma's gescheiden veld

Kopieer uw code in de daadwerkelijke publicatie en geef de code op die u hebt geprobeerd te gebruiken om het probleem op te lossen.

De functie substring_index retourneert een deel van een tekenreeks met een scheidingsteken (hier een komma), en wanneer een negatieve index wordt doorgegeven, begint het te zoeken naar overeenkomsten van de andere kant, dus -1 pakt één item uit wat anders lijsten met meerdere items zouden zijn (voor index>=2).

Volgens onze discussie heb ik de manier waarop ik dit deed aangepast en een voorbeeld getoond van het gebruik van auto-increment. (Dit wordt uitgevoerd in het gedeelte 'schema bouwen' van 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;

documentatie van de substring-functie Mogelijke duplicatie van deze vraag



  1. Hoe haal ik alleen tijd uit een DateTime-veld in Oracle SQL Developer?

  2. standaard voor kolom xxxx kan niet automatisch worden gecast om boolean te typen in Postgres DB

  3. Top 10 spelers met het hoogste slaggemiddelde

  4. CONCAT met GROUP_CONCAT in mysql