Andere Antworten auf diese Frage geben nicht zurück, was das OP benötigt, sondern geben eine Zeichenfolge zurück wie:
test1 test2 test3 test1 test3 test4
(Beachten Sie, dass test1und test3dupliziert werden), während das OP diese Zeichenfolge zurückgeben möchte:
test1 test2 test3 test4
Das Problem hierbei ist, dass die Zeichenfolge "test1 test3"dupliziert und nur einmal eingefügt wird, aber alle anderen voneinander verschieden sind ( "test1 test2 test3"unterscheidet sich von "test1 test3", selbst wenn einige in der gesamten Zeichenfolge enthaltene Tests dupliziert werden).
Was wir hier tun müssen, ist, jede Zeichenfolge in verschiedene Zeilen aufzuteilen, und wir müssen zuerst eine Zahlentabelle erstellen:
CREATE TABLE numbers (n INT);
INSERT INTO numbers VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
dann können wir diese Abfrage ausführen:
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;
und wir erhalten ein Ergebnis wie dieses:
test1
test4
test1
test1
test2
test3
test3
test3
und dann können wir die Aggregatfunktion GROUP_CONCAT unter Verwendung der DISTINCT-Klausel anwenden:
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;
Bitte sehen Sie Geige hier .