कुछ अन्य RDBMS के विपरीत MySQL के पास डिज़ाइन द्वारा इस प्रकार के पिवट संचालन के लिए मूल समर्थन नहीं है (डेवलपर्स को लगता है कि यह डेटाबेस, आपके एप्लिकेशन की परत के बजाय प्रस्तुति के लिए अधिक उपयुक्त है)।
यदि आपको MySQL के भीतर इस तरह के जोड़तोड़ को पूरी तरह से करना है, तो एक तैयार स्टेटमेंट बनाना एक रास्ता है-हालाँकि CASE
के साथ खिलवाड़ करने के बजाय , मैं शायद केवल MySQL के GROUP_CONCAT()
समारोह:
SELECT CONCAT(
'SELECT `table`.id', GROUP_CONCAT('
, `t_', REPLACE(name, '`', '``'), '`.value
AS `', REPLACE(name, '`', '``'), '`'
SEPARATOR ''),
' FROM `table` ', GROUP_CONCAT('
LEFT JOIN `table` AS `t_', REPLACE(name, '`', '``'), '`
ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
SEPARATOR ''),
' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;
PREPARE stmt FROM @qry;
EXECUTE stmt;
इसे sqlfiddle पर देखें ।
ध्यान दें कि GROUP_CONCAT()
group_concat_max_len
द्वारा सीमित है
चर (1024 बाइट्स का डिफ़ॉल्ट:यहां प्रासंगिक होने की संभावना नहीं है जब तक कि आपके पास कुछ बहुत लंबा name
. न हो मान)।