이 질문에 대한 다른 답변은 OP에 필요한 것을 반환하지 않으며 다음과 같은 문자열을 반환합니다.
test1 test2 test3 test1 test3 test4
(즉, 통지 test1
및 test3
영업 이익이 문자열을 반환하고자하는 동안 중복) :
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;
바이올린 여기를 참조 하십시오 .