- 締切済み
mysql3.23でテンポラリテーブルの使い方
mysql3.23で、以下のようなテーブルでリスト形式の番号を、対応する他のテーブルのデータにマッチさせて代入する方法を教えてください。 [テーブル1] 'id' | 'type' 1 | 1,2 2 | 1,3,5 3 | 2,4 [テーブル2] 'id' | 'name' 1 | red 2 | blue 3 | yerrow 4 | green 5 | pink [このように出力したい] 'a.id' | 'b.name' 1 | red,blue 2 | red,yerrow,pink 3 | blue,green サブクエリなど使えばできるのだと思いますが、 ずっとmysql3.23なので、今まではプログラム側でループさせて出力していましたが、 今回テンポラリーテーブルに挑戦しようと思ったので、テンポラリーテーブルを使って取得する方法があれば、ぜひやり方を教えてください。 お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.1
前提がひとつ テーブル1は、typeがカンマ区切りの文字列になっていますが これを正規化して id type 1 1 1 2 2 1 2 3 2 5 3 2 3 4 のようなデータの持ち方をしませんか? そうでない場合は、かなり非効率的な処理になりSQLでは高速な処理は期待できませんが・・・
補足
ありがとうございます。 このテーブル1は、実際は 番号(プライマリ/id) | 店舗名(固有のデータ) | 所属カテゴリー(リスト形式のtype) | 住所 のような列になっていて、たとえば店舗が複数のカテゴリーに属している時にtypeはリスト形式になります。そもそもこのようなデータの持ち方が多分、だめなのでしょうか。 プログラム側でループさせるときには、一店舗ごとにループして以下のようなsqlを発行して結果(その店舗の所属カテゴリー)を得ていました。 select * from テーブル1 left join テーブル2 on find_in_set(テーブル2.id,テーブル1.type)