Jawaban lain untuk pertanyaan ini tidak mengembalikan apa yang dibutuhkan OP, mereka akan mengembalikan string seperti:
test1 test2 test3 test1 test3 test4
(perhatikan itu test1
dan test3
digandakan) 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 .
Ini akan mengembalikan nilai yang berbeda seperti: test1, test2, test4, test3
sumber
Anda cukup menambahkan DISTINCT di depan.
jika Anda ingin menyortir,
sumber