आप इसे इस तरह शुद्ध SQL के साथ कर सकते हैं
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')))
ORDER BY value
नोट: टैली (संख्या) तालिका का लाभ उठाने के लिए चाल है और इस मामले में बहुत आसान है MySQL फ़ंक्शन SUBSTRING_INDEX()
. यदि आप इस तरह के बहुत से प्रश्न (विभाजन) करते हैं तो आप इस उदाहरण की तरह एक सबक्वायरी के साथ फ्लाई पर इसे उत्पन्न करने के बजाय एक स्थायी मिलान तालिका को पॉप्युलेट और उपयोग करने पर विचार कर सकते हैं। इस उदाहरण में उपश्रेणी 1 से 100 तक की संख्याओं का एक क्रम प्रभावी ढंग से उत्पन्न करती है जिससे आप स्रोत तालिका में प्रति पंक्ति 100 सीमांकित मानों को विभाजित कर सकते हैं। अगर आपको कम या ज्यादा की जरूरत है तो आप इसे आसानी से समायोजित कर सकते हैं।
आउटपुट:
| VALUE | |----------------| | somethingA | | somethingB | | somethingC | | somethingElseA | | somethingElseB |
यह रहा SQLFiddle डेमो
स्थायी मिलान तालिका के साथ क्वेरी कुछ इस तरह दिख सकती है
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN tally n
WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')))
ORDER BY value
यह रहा SQLFiddle डेमो