कोई 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 fiddle .