お世話になります。
MySQLでGROUP_CONCATを1つのカラムに対して行うのはいいのですが、
2つのカラムでGROUP_CONCATを行いたく、困っています。
viewを作りたいので、サブクエリは使わずにできますでしょうか。
ある装置郡が仕事を分担している様子をDB管理するのですが、
それぞれの装置でどの機能が稼働中か、準備済みかを示す、
以下のような3つのテーブルがあります。
装置テーブル
seq_id | 装置名 |
---|---|
1 | ブッシュネル |
2 | ガーンズバック |
3 | レーバテイン |
稼働中機能テーブル
seq_id | 装置seq_id | 稼働中機能 |
---|---|---|
1 | 1 | 通信中継 |
2 | 1 | 赤外線探知 |
3 | 2 | 通信中継 |
4 | 2 | 赤外線探知 |
5 | 2 | 電子妨害 |
6 | 3 | 斥力場発生装置 |
準備済み機能テーブル
seq_id | 装置seq_id | 準備済み機能 |
---|---|---|
1 | 1 | 通信中継 |
2 | 1 | 赤外線探知 |
3 | 2 | 通信中継 |
4 | 2 | 赤外線探知 |
5 | 2 | 電子妨害 |
6 | 2 | 妖精の目 |
7 | 3 | 赤外線探知 |
8 | 3 | 斥力場発生装置 |
この状況で、以下のような結果を得たいのです。
なお、実際には、ここで例に出した以外にも複数のテーブルと通常のJOINを行った結果のviewを作りたいので、
サブクエリを使わないのが理想です。
装置名 | 稼働中機能 | 準備済み機能 |
---|---|---|
ブッシュネル | 通信中継,赤外線探知 | 通信中継,赤外線探知 |
ガーンズバック | 通信中継,赤外線探知,電子妨害 | 通信中継,赤外線探知,電子妨害,妖精の目 |
レーバテイン | 斥力場発生装置 | 赤外線探知,斥力場発生装置 |
以下のようなクエリで試したところ、意図しない結果となってしまいました。
MySQL
1SELECT 2 装置名, 3 GROUP_CONCAT(稼働中機能 ORDER BY 稼働中機能 SEPARATOR ',') AS 稼働中機能, 4 GROUP_CONCAT(準備済み機能 ORDER BY 準備済み機能 SEPARATOR ',') AS 準備済み機能 5FROM 装置テーブル 6LEFT JOIN 稼働中機能テーブル 7 ON 装置テーブル.seq_id = 稼働中機能テーブル.装置seq_id 8LEFT JOIN 準備済み機能テーブル 9 ON 装置テーブル.seq_id = 準備済み機能テーブル.装置seq_id
上記のようなクエリを試したところ、GROUP_CONCATしたカラムに重複が発生してしまいました。
装置名 | 稼働中機能 | 準備済み機能 |
---|---|---|
ブッシュネル | 通信中継,通信中継,赤外線探知,赤外線探知 | 通信中継,通信中継,赤外線探知,赤外線探知 |
どのようなクエリなら解消するのでしょうか、お力お借しいただけますでしょうか。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。