sql >> Databasteknik >  >> RDS >> Mysql

Visa storlekskolumnen som rad för varje färgprodukt i relaterad tabell?

Det finns inget PIVOT-kommando (MySQL pivottabeller (omvandla rader till kolumner) ) i MySQL så att din fråga blir statisk för storlek. Det är därför det är bättre att skjuta upp detta i ansökan.

Tänkte att om du bara har ändlig och liten domän för storlekskolumnen så kan du använda följande fråga jag postade nedan:

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)

Som du kan se i IF-förhållanden använder jag värde av storlek, det är vad jag menar att frågan är statisk. Jag antar att alla möjliga storlekar kan vara antingen 32, 34, 36, 38.

Arbetsdemo @SQL-fiol

Redigera:Som jag säger från början Om storleksvärdena är okända eller domänen är stor så är det bättre att du skjuter upp pivotarbetet i ditt serverskript (t.ex. PHP) ändå kan du använda följande fråga för att bearbeta i skriptet:

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`

Se hur det fungerar @SQL-fiol .




  1. Sammanfoga sträng i MYSQL

  2. Finns det något sätt att använda json-objekt i SQL

  3. Liquibase + Postgresql + Spring Jpa:Problem med automatisk inkrementering av ID

  4. TIMESTAMP() Exempel – MySQL