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

関連する表の各カラー製品の行としてサイズ列を表示しますか?

    PIVOTコマンドはありません(MySQL ピボットテーブル(行を列に変換) )MySQLでは、クエリのサイズは静的になります。そのため、申請ではこれを延期する方がよいでしょう。

    サイズ列のドメインが有限で小さい場合は、以下に投稿した次のクエリを使用できます。

    mysql> SELECT 
        ->      c.color as color,
        ->      SUM(IF(s.size = 32, o.amount, 0)) as '32',
        ->      SUM(IF(s.size = 34, o.amount, 0)) as '34',
        ->      SUM(IF(s.size = 36, o.amount, 0)) as '36',
        ->      SUM(IF(s.size = 38, o.amount, 0)) as '38'
        ->  FROM `colors` c
        ->  INNER JOIN `order` o
        ->  INNER JOIN `sizes` s
        ->      WHERE c.`id` = o.`color` and s.`id` = o.`size`
        -> GROUP BY color 
        -> ;
    +-------+------+------+------+------+
    | color | 32   | 34   | 36   | 38   |
    +-------+------+------+------+------+
    | blue  |    3 |    4 |    2 |    0 |
    | red   |    1 |    0 |    0 |    0 |
    +-------+------+------+------+------+
    2 rows in set (0.04 sec)
    

    IF条件でわかるように、私はサイズの値を使用します。これは、質問が静的であることを意味します。可能なすべてのサイズは32、34、36、38のいずれかであると想定しています。

    作業デモ@ SQL Fiddle

    編集:最初から言っているように、サイズの値が不明であるか、ドメインが大きい場合は、サーバースクリプト(PHPなど)内でピボット作業を延期することをお勧めします。それでも、次のクエリを使用してスクリプトで処理できます:

    SELECT 
         c.color as color,
         s.size,
         o.amount  --Edit: added 
     FROM `colors` c
     INNER JOIN `order` o
     INNER JOIN `sizes` s
         WHERE c.`id` = o.`color` and s.`id` = o.`size`
    

    どのように機能するかをご覧ください@SQLフィドル 。




    1. Debian9にMariaDBをインストールして保護する方法

    2. Oracle-varchar文字列からタイムスタンプを抽出しますか?

    3. 値のリストをテーブルと比較する

    4. dev / prodでMysqlを使用し、テストでH2を使用します