복붙노트

[SQL] 하나 개의 셀에 여러 값의 SQL 쿼리

SQL

하나 개의 셀에 여러 값의 SQL 쿼리

하나 개의 셀에있는 모든 값을 가진 테이블 (코스 관심사)이 있습니다. 하지만 그 값은 IDS하고 나는 그들의 이름을 알 수 있도록 나는 다른 테이블 (코스)로 가입 할 수 있습니다.

코스 관심사 :

MemberID          MemberName              CoursesInterested
--------------    ---------------------   --------------
1                  Al                     1,4,5,6
2                  A2                     3,5,6

코스 테이블 :

CourseId          Course
--------------    ---------------------
1                 MBA 
2                 Languages
3                 English
4                 French
5                 Fashion
6                 IT

원하는 출력 :

MemberID          MemberName              CoursesInterested
--------------    ---------------------   --------------
1                  Al                     MBA,French,Fashion,IT
2                  A2                     English,Fashion,IT

나는 내가 원하는 출력을 추출하는 데 도움이 될 수 있습니다 MySQL의에서 SQL 쿼리를 수행하고 싶습니다. 나는 (하나 개의 셀에 값을 가입) 반대의 방법으로 작업을 수행하는 방법을 알고,하지만 난 다른 테이블에 상호 조인 ID를 분리 할 수있는 방법을 모색에 어려움을 겪고했습니다.

나는 지역 사회에서 어떤 도움을 주셔서 감사합니다. 감사

해결법

  1. ==============================

    1.FIND_IN_SET 사용은 쉼표로 구분 된 목록에서 무언가를 검색 할 수 있습니다.

    FIND_IN_SET 사용은 쉼표로 구분 된 목록에서 무언가를 검색 할 수 있습니다.

    SELECT i.MemberID, i.MemberName, GROUP_CONCAT(c.Course) AS CoursesInterested
    FROM CourseInterests AS i
    JOIN Course AS c ON FIND_IN_SET(c.CourseId, i.CoursesInterested)
    

    그러나, 대신 하나의 열에 과정을 저장하는 관계 테이블을 만드는 것이 더 효과적입니다. 이 유형의 조인은 큰 테이블에 대한 비용이 많이들 수 있도록, 인덱스를 사용하여 최적화 할 수 없습니다.

  2. ==============================

    2.이 아웃을 시도해보십시오

    이 아웃을 시도해보십시오

    SELECT MemberID,MemberName,Group_Concat(C.Course) from
    (
      SELECT MemberID,MemberName,SUBSTRING_INDEX(SUBSTRING_INDEX(t.CoursesInterested, ',', n.n), ',', -1) value
      FROM Table1 t CROSS JOIN 
      (
       SELECT a.N + b.N * 10 + 1 n
         FROM 
        (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
       ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
        ORDER BY n 
       ) n
     WHERE n.n <= 1 + (LENGTH(t.CoursesInterested) - LENGTH(REPLACE(t.CoursesInterested, ',', '')))
     ORDER BY MemberID,value
      ) T JOIN course C ON T.value = C.CourseId
    Group By MemberID,MemberName
    

    바이올린 데모

    산출:

    MemberID          MemberName              CoursesInterested
    --------------    ---------------------   --------------
    1                  Al                     MBA,French,Fashion,IT
    2                  A2                     English,Fashion,IT
    
  3. from https://stackoverflow.com/questions/24241953/sql-query-of-multiple-values-in-one-cell by cc-by-sa and MIT license