इस सवाल के अन्य उत्तर ओपी को क्या चाहिए वे वापस नहीं आते हैं, वे एक स्ट्रिंग लौटाएंगे जैसे:
test1 test2 test3 test1 test3 test4
(ध्यान दें कि test1
और test3
डुप्लिकेट हैं) जबकि ओपी इस स्ट्रिंग को वापस करना चाहता है:
test1 test2 test3 test4
यहां समस्या यह है कि स्ट्रिंग "test1 test3"
को डुप्लिकेट किया गया है और केवल एक बार डाला गया है, लेकिन सभी अन्य एक दूसरे के "test1 test2 test3"
लिए अलग हैं ( से अलग है"test1 test3"
, भले ही पूरे स्ट्रिंग में निहित कुछ परीक्षण दोहराए गए हों)।
हमें यहां क्या करना है प्रत्येक स्ट्रिंग को अलग-अलग पंक्तियों में विभाजित करना है, और हमें पहले एक संख्या तालिका बनाने की आवश्यकता है:
CREATE TABLE numbers (n INT);
INSERT INTO numbers VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
तब हम इस क्वेरी को चला सकते हैं:
SELECT
SUBSTRING_INDEX(
SUBSTRING_INDEX(tableName.categories, ' ', numbers.n),
' ',
-1) category
FROM
numbers INNER JOIN tableName
ON
LENGTH(tableName.categories)>=
LENGTH(REPLACE(tableName.categories, ' ', ''))+numbers.n-1;
और हमें इसका परिणाम मिलता है:
test1
test4
test1
test1
test2
test3
test3
test3
और फिर हम DISTINCT क्लॉज का उपयोग करके GROUP_CONCAT कुल कार्य को लागू कर सकते हैं:
SELECT
GROUP_CONCAT(DISTINCT category ORDER BY category SEPARATOR ' ')
FROM (
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(tableName.categories, ' ', numbers.n), ' ', -1) category
FROM
numbers INNER JOIN tableName
ON LENGTH(tableName.categories)>=LENGTH(REPLACE(tableName.categories, ' ', ''))+numbers.n-1
) s;
कृपया यहाँ फिडल देखें ।