sql >> データベース >  >> RDS >> Mysql

mySQL>>コンマ区切りフィールドの正規化

    コードを実際の投稿にコピーし、問題を解決するために使用しようとしたコードを提供してください。

    substring_index関数は、区切り文字(ここではコンマ)を含む文字列の一部を返します。負のインデックスが渡されると、反対側から一致するものの検索が開始されるため、-1 マルチアイテムリスト(インデックス> =2の場合)から1つのアイテムを取得します。

    私たちの議論によれば、私はこれをどのように行うかを微調整し、自動インクリメントの使用例を示しました。 (これは、フィドルの「スキーマの構築」部分で実行されます。)

    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;
    

    サブストリング関数のドキュメント この質問の重複の可能性



    1. SQLインデックスの概要

    2. MacにAzureDataStudioをインストールする方法

    3. テーブルが存在する場合は行を削除しますSQL

    4. n行を選択する方法