복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.당신은 group_concat_max_len 매개 변수를 설정하여 GROUP_CONCAT 값의 최대 길이를 변경할 수 있습니다.

    당신은 group_concat_max_len 매개 변수를 설정하여 GROUP_CONCAT 값의 최대 길이를 변경할 수 있습니다.

    MySQL의 문서에서 자세한 내용을 참조하십시오.

  5. ==============================

    5.그룹 집계 기능, GROUP_CONCAT이있다.

    그룹 집계 기능, GROUP_CONCAT이있다.

  6. ==============================

    6.내 경우에는 그렇지 않으면, 결과는 바이너리 형식으로 인코딩 된, 나는 ID의 행을했고, 문자로 캐스팅 할 필요가 있었다 :

    내 경우에는 그렇지 않으면, 결과는 바이너리 형식으로 인코딩 된, 나는 ID의 행을했고, 문자로 캐스팅 할 필요가 있었다 :

    SELECT CAST(GROUP_CONCAT(field SEPARATOR ',') AS CHAR) FROM table
    
  7. ==============================

    7.사용의 MySQL (5.6.13) 다음과 같은 세션 변수 및 대입 연산자

    사용의 MySQL (5.6.13) 다음과 같은 세션 변수 및 대입 연산자

    SELECT @logmsg := CONCAT_ws(',',@logmsg,items) FROM temp_SplitFields a;
    

    당신은 얻을 수 있습니다

    test1,test11
    
  8. ==============================

    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. ==============================

    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. ==============================

    10.이 시도:

    이 시도:

    DECLARE @Hobbies NVARCHAR(200) = ' '
    
    SELECT @Hobbies = @Hobbies + hobbies + ',' FROM peoples_hobbies WHERE person_id = 5;
    
  11. ==============================

    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
    
  12. from https://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field by cc-by-sa and MIT license