2016-03-26 7 views
1

用語とSQLに関する知識が不足しているため、この質問に対する回答を探すのに問題があります。 。MySQL/MariaDBの異なる行にある同じ列の2つのセルのデータをマージする

私は以下のテーブルを持つデータベースを持っています:
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 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 type;別の行にプライマリとセカンダリのタイプが表示され

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; 

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

は、これまで私は、次のSQLコマンドを持っています。
デュアルタイプのポケモンの場合、両方のタイプを同じ行に表示するにはどうすればよいですか?

私の現在の結果:

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

望ましい結果:

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

(。!はい、フシギダネがデュアルタイプで、私はあまりにも驚いた)

+1

質問を編集し、サンプルデータと希望する結果を提供してください。 –

答えて

2

使用MySQLのgroup_concat() functionは、値を結合します単一の値で異なるレコードから:

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; 
+0

申し訳ありませんが、実際には動作しません。これは列内の*すべての*を連結しています。私は 'poketype'の' poketype'のセルだけです。 'pkm_code'は連結するのと同じです –

+0

あなたはgroup by節を逃したと思います。それは私の答えの質問の最後の行にあります。 – Shadow

+0

ああ!出来た!ありがとうございました! –

関連する問題