在MySQL/MariaDB中将来自同一列不同行的两个单元格的数据合并
我在寻找这个问题的答案时遇到了困难,因为我缺乏关于术语和SQL的知识,即使我知道它可能存在 我有一个包含以下表格的数据库:在MySQL/MariaDB中将来自同一列不同行的两个单元格的数据合并,mysql,sql,mariadb,Mysql,Sql,Mariadb,我在寻找这个问题的答案时遇到了困难,因为我缺乏关于术语和SQL的知识,即使我知道它可能存在 我有一个包含以下表格的数据库: desc-pkm +-----------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+---
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 | |
+-----------------+---------------+------+-----+---------+-------+
描述poketype
+---------------------+------------+------+-----+---------+-------+
| 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 | |
+---------------------+------------+------+-----+---------+-------+
desc型
+-----------+-------------+------+-----+---------+-------+
| 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,poison|
(是的,bulbasaur是一种双重类型。我也很惊讶!)使用mysql将来自不同记录的值组合成一个值:
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;
从poketype中选择pkm.pkm_代码、pkm.pkm_名称、group_concat(type.type_名称)作为typename
在pkm.pkm_code=poketype.pkm_code上加入pkm
poketype.type\u code=type.type\u code上的联接类型
其中pkm.pkm_代码编辑您的问题,并提供示例数据和所需结果。抱歉,这不起作用。它包含列中的所有内容,我只是poketype
中的单元格,其中pkm_code
与所包含的单元格相同。我认为您错过了group by子句。它在我回答的问题的最后一行。
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;