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 test1
und test3
dupliziert 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 .