- ベストアンサー
複数テーブル検索で同idの部分は結合させたい
- 初心者です。tableA, tableB, tableCのidを軸にデータを表示したいが、tableDのiconsの内容も出力したいが、行ごとにレコードが分かれてしまう。ひとつのカラムにiconsをカンマ区切りで結合したい。
- tableA, tableB, tableCのidを軸にデータを表示する方法はわかるが、tableDのiconsを結合する方法がわからない。
- MySQL 5.0.90-logを使用して、tableA, tableB, tableCのidを軸にデータを表示したいが、tableDのiconsをカンマ区切りで結合したいが方法がわからない。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
group_concatを使ってみてください select tableA.id , body , name , sex , num , tableC.order_id , group_concat(icons order by icons) as icons FROM tableA , tableB , tableC ,tableD WHERE tableA.id = tableB.id AND tableA.id = tableC.id AND tableC.order_id = tableD.order_id group by tableA.id , body , name , sex , num , tableC.order_id
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
解決しているみたいですが create index idx_order_id on tableD ( order_id, icons ); で索引つくって select tableA.id , tableA.body , tableB.name , tableB.sex , tableC.num , tableC.order_id, group_concat(tableD.icons order by icons) FROM tableA inner join tableB on tableA.id = tableB.id inner join tableC on tableA.id = tableC.id inner join tableD on tableC.order_id=tableD.order_id group by tableD.order_id; 実行計画を比較してみてください。
お礼
ありがとうございます!
- yambejp
- ベストアンサー率51% (3827/7415)
ごめんなさい、手を抜きすぎた。 こんな感じでどうですか? select tableA.id , body , name , sex , num , tableC.order_id ,icons FROM tableA , tableB , tableC , (SELECT order_id, group_concat(icons order by icons) as icons FROM tableD group by order_id) AS D WHERE tableA.id = tableB.id AND tableA.id = tableC.id AND tableC.order_id = D.order_id
お礼
どちらもできるんですね! ありがとうございます!!
補足
すいません、、、 : Unknown column 'order_id' in 'field list'] というエラーが出てしまいました。。。 ためしに、tableAをつけてみたんですが、 : Unknown column 'tableA.order_id' in 'field list'] となってしまいました。。。
お礼
ありがとうございます! 実は、実際は、カラムがものすごい量があって、 group by tableA.id , body , name , sex , num , tableC.order_id の部分は全部入れないといけないものなのでしょうか?? ただだいぶいいところまで来ました!!