programing

MySQL/MariaDB의 다른 행에 있는 동일한 열에 있는 두 셀의 데이터를 병합합니다.

yoursource 2022. 11. 21. 23:09
반응형

MySQL/MariaDB의 다른 행에 있는 동일한 열에 있는 두 셀의 데이터를 병합합니다.

용어 및 SQL에 대한 지식이 부족하기 때문에 이 질문에 대한 답을 찾는 데 어려움을 겪고 있습니다.

다음 테이블을 가진 데이터베이스가 있습니다.
desc pkm;

+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| pkm_code        | int(11)       | NO   | PRI | NULL    |       |
| pkm_name        | varchar(32)   | NO   | UNI | NULL    |       |
| pkm_category    | varchar(32)   | NO   |     | NULL    |       |
| pkm_description | varchar(1280) | NO   |     | NULL    |       |
| pkm_weight      | float         | NO   |     | NULL    |       |
| evolution_code  | int(11)       | YES  | MUL | NULL    |       |
+-----------------+---------------+------+-----+---------+-------+

desc poktype;

+---------------------+------------+------+-----+---------+-------+
| Field               | Type       | Null | Key | Default | Extra |
+---------------------+------------+------+-----+---------+-------+
| pkm_code            | int(11)    | NO   | PRI | NULL    |       |
| type_code           | int(11)    | NO   | PRI | NULL    |       |
| poketype_is_primary | tinyint(1) | NO   |     | NULL    |       |
+---------------------+------------+------+-----+---------+-------+

설명 유형

+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| type_code | int(11)     | NO   | PRI | NULL    |       |
| type_name | varchar(32) | NO   | UNI | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

그리고 지금까지 다음과 같은 SQL 명령어가 있습니다.

SELECT pkm.pkm_code, pkm.pkm_name,type.type_name FROM poketype
    JOIN pkm ON pkm.pkm_code=poketype.pkm_code
    JOIN type ON poketype.type_code=type.type_code
    WHERE pkm.pkm_code<=151
    ORDER BY pkm_code;

프라이머리 타입과 세컨더리 타입이 다른 행에 표시됩니다.
듀얼 타입의 포켓몬이라면 어떻게 하면 두 타입을 같은 열에 표시할 수 있을까요?

현재 결과:

+-----------+-------------+-----------+
| pkm_code  | pkm_name    | type_name |
+-----------+-------------+-----------+
| 1         | Bulbasaur   | grass     |
| 1         | Bulbasaur   | poison    |

원하는 결과:

+-----------+-------------+-------------+
| pkm_code  | pkm_name    | type_name   |
+-----------+-------------+-------------+
| 1         | Bulbasaur   | grass,poison|

(네, bulbasaur는 듀얼 타입입니다.나도 놀랐어!)

mysql의 group_concat() 함수를 사용하여 여러 레코드의 값을 하나의 값으로 결합합니다.

SELECT pkm.pkm_code, pkm.pkm_name, group_concat(type.type_name) as typename FROM poketype
    JOIN pkm ON pkm.pkm_code=poketype.pkm_code
    JOIN type ON poketype.type_code=type.type_code
    WHERE pkm.pkm_code<=151
    GROUP BY pkm.pkm_code, pkm.pkm_name;

언급URL : https://stackoverflow.com/questions/36238386/merge-data-from-two-cells-from-the-same-column-in-different-rows-in-mysql-mariad

반응형