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

ピボットテーブルは1行のみを返します

    まず、同じproduct_id =1に対して2つの属性があり、テーブルproduct_attributesを変更します このように-

    INSERT INTO `product_attributes` (`product_id`,`type`,`value`) VALUES
      (1,1,'blue'),
      (1,2,'shirt'),
      (2,1,'green'),
      (2,2,'pants');
    

    次に、これを試してください-

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'MAX(IF(pat.name = ''', name, ''', pa.value, NULL)) AS ', name
        )
      ) INTO @sql
    FROM product_attribute_types;
    
    SET @sql = CONCAT('SELECT pa.product_id, ', @sql, ' FROM product_attributes pa INNER JOIN product_attribute_types pat ON pa.type = pat.id GROUP BY pa.product_id');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    結果:

    +------------+-------+-------+
    | product_id | color | name  |
    +------------+-------+-------+
    |          1 | blue  | shirt |
    |          2 | green | pants |
    +------------+-------+-------+
    

    必要に応じてWHEREフィルターを追加します。



    1. Laravelで複数の画像をアップロードする方法

    2. 特定のプレフィックスを持つ複数のテーブルに特権を付与する

    3. テーブル内の欠落した日付の直前の日付から欠落した日付と価格を自動的に生成するSQL

    4. SQL JOINとINのパフォーマンス?