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

COLUMNSPLITを使用したMySQLGROUP_CONCAT

    GROUP_CONCATエントリの数がわかっている場合(つまり、ID =1の場合は3つのフィールドが結合され、2などの場合は2つのフィールドが結合されます)、汚い方法があります。

    SELECT ID, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 1), ',', -1) AS CODE1,
    If(  length(GROUP_CONCAT(NAME)) - length(replace(GROUP_CONCAT(NAME), ',', ''))>1,  
           SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 2), ',', -1) ,NULL) 
               as CODE2,
       SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 3), ',', -1) AS CODE3
    FROM test
    GROUP BY ID;
    

    出力:

    ID  CODE1   CODE2   CODE3
    1   A          B    C
    2   D       (null)  E
    3   F          G    H
    

    上記のクエリは、3つのフィールドをGROUP_CONCATしていることを前提としています。クエリを動的に生成している場合は、試してみることができます。 SQLFIDDLE

    編集: 注:コードは行ごとに異なる場合があります。(これを無視します)



    1. MySQL-外部キーを使用して複数のテーブルに挿入する方法

    2. MySQLSELECT*クエリを並行して実行する

    3. AWS上のWindowsでのShareplex入門、パート2

    4. Railsは同時入力で一意性が失敗することを検証します