Bu sorunun diğer cevapları OP'nin ihtiyaç duyduğu şeyleri döndürmez, şöyle bir dize döndürür:
test1 test2 test3 test1 test3 test4
(buna dikkat edin test1
ve test3
çoğaltılır) OP bu dizeyi döndürmek ister:
test1 test2 test3 test4
Buradaki sorun, dizenin "test1 test3"
çoğaltılması ve yalnızca bir kez eklenmesidir, ancak diğerlerinin tümü birbirinden farklıdır ( dizenin tamamında bulunan bazı testler çoğaltılmış olsa bile "test1 test2 test3"
farklıdır "test1 test3"
).
Burada yapmamız gereken her dizeyi farklı satırlara ayırmak ve önce bir sayı tablosu oluşturmamız gerekiyor:
CREATE TABLE numbers (n INT);
INSERT INTO numbers VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
o zaman bu sorguyu çalıştırabiliriz:
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;
ve bunun gibi bir sonuç elde ediyoruz:
test1
test4
test1
test1
test2
test3
test3
test3
ve sonra DISTINCT deyimini kullanarak GROUP_CONCAT toplama işlevini uygulayabiliriz:
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;
Lütfen buraya bakın .