みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

2つの関連するテーブルで指定した値を条件orで取得したい

mysql5.1.33を使用しています。
次のような構成で、

テーブル「tbl1s」
id int(11)

テーブル「tbl2s」
id int(11)
name varchar(30)

テーブル「tbl1s_tbl2s」
id int(11)
tbl1_id int(11) tbl1sの外部キー
tbl2_id int(11) tbl2sの外部キー

テーブル「tbl1s」
+------+-------+
|  id  | club |
+------+-------+
|  1  | 野球 |
+------+-------+
|  2  | テニス|
+------+-------+
|  3  | サッカー|
+------+-------+

+------+-------+
テーブル「tbl2s」
+------+-------+
|  id  | name |
+------+-------+
|  1  | sato  |
+------+-------+
|  2  | suzuki |
+------+-------+
|  3  | tanaka |
+------+-------+

テーブル「tbl1s_tbl2s」
+------+-------+-------+
|  id  | tbl1_id | tbl2_id |
+------+-------+-------+
|  1  | 1    | 1   |
+------+-------+------+
|  2  | 1    | 2   |
+------+-------+------+
|  3  | 3    | 1   |
+------+-------+------+

というテーブル構成で、「tbl1s」テーブルの行を
「tbl1s」のclubかない場合には「tbl2s」のnameを検索条件にして取得したいのですが
どのように記述すれば良いのでしょうか?
例えば「テニス」を条件にした場合は、「tbl2s」のnameにはないですが「tbl1s」のclubには合致するのがあるので

テーブル「tbl1s」
+------+
|  id  |
+------+
|  2  |
+------+

を取得したいです。

投稿日時 - 2010-01-18 16:15:14

QNo.5602817

すぐに回答ほしいです

質問者が選んだベストアンサー

仮に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'

でヒットしますね。そういうことですか?

投稿日時 - 2010-01-19 18:01:19

お礼

ご回答ありがとうございます。
まさにその通りで、そのやり方でできました。
ありがとうございます。

投稿日時 - 2010-01-20 16:11:32

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

命題の提示がまちがっているようで、要領を得ません

たんに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

投稿日時 - 2010-01-18 17:04:19

お礼

ご回答ありがとうございます。
こちらの提示のミスと説明不足があり申し訳ございません。
まず「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などで繋げて記述したいです。

投稿日時 - 2010-01-18 22:09:08