source

SQL join + group_concat이 일부 행을 반환하지 않음

manysource 2023. 6. 9. 22:07

SQL join + group_concat이 일부 행을 반환하지 않음

데이터베이스에는 다음 테이블이 있습니다.

People
+-----------+------------+
| IdPeople  | Name       |
+-----------+------------+
|         1 | James      |
|         2 | Chris      |
+-----------+------------+

ref
+---------+-------------+------+
| People  | Color       | Code |
+---------+-------------+------+
|       1 |           2 |    1 |
|       1 |           1 |    2 |
|       1 |           6 |    3 |
|       2 |           1 |    1 |
|       2 |           6 |    4 |
|       2 |           4 | NULL |
|       2 |           5 | NULL |
+---------+-------------+------+

Colors
+--------+--------------------+
| IdCol  | Color              |
+--------+--------------------+
|      1 | Blue               |
|      2 | Green              |
|      3 | Yellow             |
|      4 | Red                |
|      5 | Black              |
|      6 | White              |
+--------+--------------------+

Codes
+--------+----------------+
| IdCode | Code           |
+--------+----------------+
|      1 | C++            |
|      2 | JavaScript     |
|      3 | Python         |
|      4 | HTML           |
+--------+----------------+

다음과 같은 것을 얻기 위해 모든 테이블에 참여하고 싶습니다.

+------------+---------------------------+------------------------------------+
| Name       | Color                     | Code                               |
+------------+---------------------------+------------------------------------+
| Chris      | Blue, White, Red, Black   | C++, HTML                          |
| James      | Green, Blue, White        | C++, JavaScript, Python            |
+------------+---------------------------+------------------------------------+

저는 이렇게 group_concat에 가입하려고 했습니다.

SELECT People.Name,
       group_concat(Colors.Color separator ", ") AS "Color",
       group_concat(Codes.Code separator ", ") AS "Code"
FROM People
INNER JOIN ref ON People.IdPeople=ref.People
INNER JOIN Colors ON ref.Color=Colors.IdCol
INNER JOIN Codes ON ref.Code=Codes.Code
GROUP BY Name;

하지만 group_concat은 빈 줄을 반환하지 않기 때문에 크리스 줄에 있는 Black과 White를 제외한 모든 것을 얻습니다.제가 이걸 어떻게 하는지 몰라서 그러는데, 누가 좀 도와주시겠어요?

~하듯이ref.codenull일 수 있습니다. 코드 테이블을 외부로 결합해야 합니다.LEFT OUTER JOIN Codes ON ....

전체 쿼리:

SELECT People.Name,
       group_concat(Colors.Color separator ", ") AS "Color",
       group_concat(Codes.Code separator ", ") AS "Code"
FROM People
INNER JOIN REF ON People.IdPeople=ref.People
INNER JOIN Colors ON ref.Color=Colors.IdCol
LEFT JOIN Codes ON ref.Code=Codes.Code
GROUP BY Name;

언급URL : https://stackoverflow.com/questions/64968378/sql-join-group-concat-not-returning-some-rows