[SQL] 나는 하나 개의 필드에 여러 개의 MySQL의 행을 연결할 수 있습니까?
SQL나는 하나 개의 필드에 여러 개의 MySQL의 행을 연결할 수 있습니까?
MySQL을 사용, 내가 뭔가를 같이 할 수 있습니다 :
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
내 출력 :
shopping
fishing
coding
대신 난 그냥 1 행, 1 열을 원하는 :
예상 출력 :
shopping, fishing, coding
그 이유는 내가 여러 테이블에서 여러 값을 선택하고있어, 모든 조인 후 내가 좋아하는 것보다 내가 더 많은 행을 가지고 있다는 것입니다.
나는 MySQL의 문서에 기능을 위해 검토 한 결과 그렇게 사람이 여기에이 작업을 수행하는 방법을 알고 않습니다는 CONCAT 또는 CONCAT_WS 기능은 결과 세트를 승인처럼 보이지 않는다?
해결법
-
==============================
1.당신은 GROUP_CONCAT을 사용할 수 있습니다 :
당신은 GROUP_CONCAT을 사용할 수 있습니다 :
SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;
루드비히는 자신의 의견에 명시된 바와 같이, 당신은 피하기 중복에 DISTINCT 연산자를 추가 할 수 있습니다 :
SELECT person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;
월 자신의 의견에 명시된 바와 같이 할 수 있습니다에 의해 ORDER를 사용하여 내파 전에 또한 정렬 값 :
SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id;
다그 그의 의견에 명시된 바와 같이, 결과에 대한 1024 바이트 제한이 있습니다. 이 문제를 해결하려면 쿼리하기 전에이 쿼리를 실행합니다 :
SET group_concat_max_len = 2048;
물론, 당신은 당신의 필요에 따라 2,048을 변경할 수 있습니다. 계산 값을 지정하려면 :
SET group_concat_max_len = CAST( (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ') FROM peoples_hobbies GROUP BY person_id) AS UNSIGNED );
-
==============================
2.당신의 MySQL 버전 (4.1)을 지원하는 경우 GROUP_CONCAT에서보세요. 자세한 내용은 설명서를 참조하십시오.
당신의 MySQL 버전 (4.1)을 지원하는 경우 GROUP_CONCAT에서보세요. 자세한 내용은 설명서를 참조하십시오.
그것은 같이 보일 것입니다 :
SELECT GROUP_CONCAT(hobbies SEPARATOR ', ') FROM peoples_hobbies WHERE person_id = 5 GROUP BY 'all';
-
==============================
3.경고 :이 게시물은 배가 할 것입니다.
경고 :이 게시물은 배가 할 것입니다.
나는 나 자신이 여러 개별 행-대신 특정 필드에 그룹 및 CONCATENATE의 선택 역부족.
하자 당신이 제품 ID와 이름과 가격의 테이블을 가지고 말 :
+------------+--------------------+-------+ | product_id | name | price | +------------+--------------------+-------+ | 13 | Double Double | 5 | | 14 | Neapolitan Shake | 2 | | 15 | Animal Style Fries | 3 | | 16 | Root Beer | 2 | | 17 | Lame T-Shirt | 15 | +------------+--------------------+-------+
그럼 당신은 어떤 공상 schmancy 아약스가 그 체크 박스로 떨어져 목록이 강아지.
귀하의 배고픈 - 하마 사용자가 선택하는 13, 15, 그녀의 오늘 (16) 없음 디저트 ...
방법이 순수 MySQL과, 한 줄에 사용자의 주문을 요약합니다.
하여 IN 절과 함께 사용 GROUP_CONCAT :
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);
어떤 출력 :
+------------------------------------------------+ | order_summary | +------------------------------------------------+ | Double Double + Animal Style Fries + Root Beer | +------------------------------------------------+
당신도 총 가격을 원하는 경우) (SUM에 던져 :
mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary, SUM(price) AS total FROM product WHERE product_id IN (13, 15, 16); +------------------------------------------------+-------+ | order_summary | total | +------------------------------------------------+-------+ | Double Double + Animal Style Fries + Root Beer | 10 | +------------------------------------------------+-------+
PS : 사과 당신이 가까운 곳에에서-N-아웃이없는 경우 ...
-
==============================
4.당신은 group_concat_max_len 매개 변수를 설정하여 GROUP_CONCAT 값의 최대 길이를 변경할 수 있습니다.
당신은 group_concat_max_len 매개 변수를 설정하여 GROUP_CONCAT 값의 최대 길이를 변경할 수 있습니다.
MySQL의 문서에서 자세한 내용을 참조하십시오.
-
==============================
5.그룹 집계 기능, GROUP_CONCAT이있다.
그룹 집계 기능, GROUP_CONCAT이있다.
-
==============================
6.내 경우에는 그렇지 않으면, 결과는 바이너리 형식으로 인코딩 된, 나는 ID의 행을했고, 문자로 캐스팅 할 필요가 있었다 :
내 경우에는 그렇지 않으면, 결과는 바이너리 형식으로 인코딩 된, 나는 ID의 행을했고, 문자로 캐스팅 할 필요가 있었다 :
SELECT CAST(GROUP_CONCAT(field SEPARATOR ',') AS CHAR) FROM table
-
==============================
7.사용의 MySQL (5.6.13) 다음과 같은 세션 변수 및 대입 연산자
사용의 MySQL (5.6.13) 다음과 같은 세션 변수 및 대입 연산자
SELECT @logmsg := CONCAT_ws(',',@logmsg,items) FROM temp_SplitFields a;
당신은 얻을 수 있습니다
test1,test11
-
==============================
8.나는 더 복잡한 쿼리를했다, 나는 일에 그것을 얻기 위해 외부 쿼리에 GROUP_CONCAT을 사용 남겼 :
나는 더 복잡한 쿼리를했다, 나는 일에 그것을 얻기 위해 외부 쿼리에 GROUP_CONCAT을 사용 남겼 :
SELECT DISTINCT userID FROM event GROUP BY userID HAVING count(distinct(cohort))=2);
SELECT GROUP_CONCAT(sub.userID SEPARATOR ', ') FROM (SELECT DISTINCT userID FROM event GROUP BY userID HAVING count(distinct(cohort))=2) as sub;
이 힘 도움말 사람을 바랍니다.
-
==============================
9.이 예제를 게시 - 하위 쿼리와 GROUP_CONCAT을 사용하는 방법을 여기에서 찾고있는 사람의 경우
이 예제를 게시 - 하위 쿼리와 GROUP_CONCAT을 사용하는 방법을 여기에서 찾고있는 사람의 경우
SELECT i.*, (SELECT GROUP_CONCAT(userid) FROM favourites f WHERE f.itemid = i.id) AS idlist FROM items i WHERE i.id = $someid
GROUP_CONCAT가 하위 쿼리 내에서 사용되어야합니다 그래서, 그것을 포장하지.
-
==============================
10.이 시도:
이 시도:
DECLARE @Hobbies NVARCHAR(200) = ' ' SELECT @Hobbies = @Hobbies + hobbies + ',' FROM peoples_hobbies WHERE person_id = 5;
-
==============================
11.우리는 MySQL의에서 CONCATENATE 컬럼에 두 가지 방법이있다
우리는 MySQL의에서 CONCATENATE 컬럼에 두 가지 방법이있다
select concat(hobbies) as `Hobbies` from people_hobbies where 1
또는
select group_concat(hobbies) as `Hobbies` from people_hobbies where 1
from https://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 주입을 방지하는 좋은 방법은 무엇입니까? [복제] (0) | 2020.03.05 |
---|---|
[SQL] 어떻게 SQL의 다른 열을 기준으로 DISTINCT MAX (열 값)와 행을 선택할 수 있습니까? (0) | 2020.03.05 |
[SQL] 나무에 평평한 테이블을 구문 분석하는 가장 효율적인 / 우아한 방법은 무엇입니까? (0) | 2020.03.05 |
[SQL] INNER가, 왼쪽, 오른쪽 조인 및 FULL은 조인의 차이점은 무엇입니까? [복제] (0) | 2020.03.05 |
[SQL] 분류 결과 각 그룹에 대해 상위 N 레코드를 가져 오기 (0) | 2020.03.05 |