- ベストアンサー
2つの関連するテーブルで条件ORで取得する方法
- mysql5.1.33を使用している環境で、テーブル「tbl1s」と「tbl2s」が関連しており、指定した値を条件ORで取得する方法を知りたいです。
- 「tbl1s」テーブルの行を条件を満たす場合には「tbl1s」のclub、満たさない場合には「tbl2s」のnameを検索条件にして取得する方法を教えてください。
- 具体的には、「テニス」を条件にした場合、「tbl2s」のnameにはないですが、「tbl1s」のclubには合致するデータがあるため、そのデータを取得したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
仮にtbl1sのid=2がsato式テニスだったとして select * from tbl1s left join tbl1s_tbl2s on tbl1s.id=tbl1_id left join tbl2s on tbl2s.id=tbl2_id where club like '%sato%' or name='sato' でヒットしますね。そういうことですか?
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
命題の提示がまちがっているようで、要領を得ません たんにtbl1s_tbl2sのtbl1_idにidのないtbl1sのデータを抽出すれば いいんじゃないのですか? であれば、こんなかんじ select `tbl1s`.* from tbl1s left join tbl1s_tbl2s on tbl1s.id=tbl1_id where tbl1s_tbl2s.id is null
お礼
ご回答ありがとうございます。 こちらの提示のミスと説明不足があり申し訳ございません。 まず「tbl1s」は テーブル「tbl1s」 id int(11) club varchar(30) でした。訂正します。 例えが分かり難かったので、 例えば、 「著者名」テーブルがその本を書いた人物 「著書」テーブルが本(作品) だとして、共同で書かれた著書もあるとします。 [本] タイトル[佐藤式、ダイエット術] 著者名[佐藤][田中] というデータベースがあって、ユーザが1つしかない入力エリアで本を検索した場合に 「ダイエット」で検索した場合に著者名にはなく、ですがタイトルにはあるので調べればその本が見つかります。 この例なら佐藤で検索すればどちらにも引っかかるのでその本が見つかりますが、 1つしかない入力エリアなのでこちら(プログラム)側ではとりあえず「著者名」テーブルと「著書」テーブル 両方をorで調べて結果を得ることになると思うのですが、この例で伝わりましたでしょうか? 前回に質問させて頂いたときには http://oshiete1.goo.ne.jp/qa5573691.html 「tbl2s」のnameだけを調べればよかったのですが、今回は 「tbl1s」のclubと「tbl2s」のnameを調べて、どちらかにその検索単語があれば 「tbl1s」のidを表示したいということです。 それを1つのsqlでjoinなどで繋げて記述したいです。
お礼
ご回答ありがとうございます。 まさにその通りで、そのやり方でできました。 ありがとうございます。