Jawaban lain untuk pertanyaan ini tidak mengembalikan apa yang dibutuhkan OP, mereka akan mengembalikan string seperti:
test1 test2 test3 test1 test3 test4
(perhatikan itu test1dan test3digandakan) sementara OP ingin mengembalikan string ini:
test1 test2 test3 test4
Masalahnya di sini adalah bahwa string "test1 test3"digandakan dan dimasukkan hanya sekali, tetapi semua yang lain berbeda satu sama lain ( "test1 test2 test3"berbeda dari "test1 test3", bahkan jika beberapa tes yang terkandung dalam seluruh string digandakan).
Apa yang perlu kita lakukan di sini adalah untuk membagi setiap string menjadi baris yang berbeda, dan pertama-tama kita perlu membuat tabel angka:
CREATE TABLE numbers (n INT);
INSERT INTO numbers VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
maka kita dapat menjalankan kueri ini:
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;
dan kami mendapatkan hasil seperti ini:
test1
test4
test1
test1
test2
test3
test3
test3
dan kemudian kita dapat menerapkan fungsi agregat GROUP_CONCAT, menggunakan klausa DISTINCT:
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;
Silakan lihat biola di sini .