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

テーブルの行を元の行の列タイトルを持つ列に結合しました

    GROUP_CONCAT() プリペアドステートメントを生成するためのカーソルの代わりに:

    SELECT CONCAT(
     ' SELECT MDE_ID,'
    
    ,  GROUP_CONCAT(
         't', MDF_ID, '.MFV_Value AS `', REPLACE(MDF_Label, '`', '``'), '`'
       )
    
    ,' FROM ModuleEntries '
    
    , GROUP_CONCAT(
        'LEFT JOIN ModuleEntryFieldValues AS t', MDF_ID, '
           ON t', MDF_ID, '.MFV_MDE_ID = ModuleEntries.MDE_ID
          AND t', MDF_ID, '.MFV_MDF_ID = ', MDF_ID
      SEPARATOR ' ')
    
    ) INTO @qry FROM ModuleFields;
    

    サンプルデータ@qryを使用して、空白を編集するために保存して読みやすくします。 その場合、次のものが含まれます:

    SELECT MDE_ID,
           t1.MFV_Value AS `Height`,
           t2.MFV_Value AS `Width`,
           t3.MFV_Value AS `Weight`
    FROM   ModuleEntries
      LEFT JOIN ModuleEntryFieldValues AS t1
             ON t1.MFV_MDE_ID = ModuleEntries.MDE_ID AND t1.MFV_MDF_ID = 1
      LEFT JOIN ModuleEntryFieldValues AS t2
             ON t2.MFV_MDE_ID = ModuleEntries.MDE_ID AND t2.MFV_MDF_ID = 2
      LEFT JOIN ModuleEntryFieldValues AS t3
             ON t3.MFV_MDE_ID = ModuleEntries.MDE_ID AND t3.MFV_MDF_ID = 3
    

    次に、そのステートメントを準備して実行できます。

    PREPARE stmt FROM @qry;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    SET @qry = NULL;
    

    これにより、次の結果が得られます。

    MDE_ID    Height    Width    Weight
         1    120cms    30cms    (null)
    

    sqlfiddle でご覧ください 。




    1. テーブル'performance_schema.session_variables'は存在しません

    2. AWSPostgresRDSテーブルをAWSS3にエクスポートする

    3. SQLServerのタイムアウト設定

    4. MySQLでストアドプロシージャをバックアップする方法