この質問に対する他の回答は、OPが必要とするものを返さず、次のような文字列を返します。
test1 test2 test3 test1 test3 test4
(それが重複しtest1
てtest3
いることに注意してください)OPがこの文字列を返したい場合:
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;
こちらフィドルをご覧ください。