나는하고있다 SELECT GROUP_CONCAT(categories SEPARATOR ' ') FROM table. 아래 샘플 데이터 :
categories
----------
test1 test2 test3
test4
test1 test3
test1 test3
그러나, 나는 test1 test2 test3 test4 test1 test3돌아오고있다. 그리고 나는 되돌아 가고 싶다 test1 test2 test3 test4. 어떤 아이디어?
많은 감사합니다!
답변
GROUP_CONCAT 에는 DISTINCT 속성이 있습니다.
SELECT GROUP_CONCAT(DISTINCT categories ORDER BY categories ASC SEPARATOR ' ') FROM table
답변
답변
DISTINCT: 고유 한 값을 제공합니다.
SELECT GROUP_CONCAT(DISTINCT(categories )) AS categories FROM table
답변
이 질문에 대한 다른 답변은 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;
답변
SELECT
GROUP_CONCAT(DISTINCT (category))
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;
test1, test2, test4, test3 과 같은 고유 값을 반환합니다.
답변
DISTINCT 를 앞에 추가하면 됩니다.
SELECT GROUP_CONCAT(DISTINCT categories SEPARATOR ' ')
정렬하려면
SELECT GROUP_CONCAT(DISTINCT categories ORDER BY categories ASC SEPARATOR ' ')
답변
