プロが教える店舗&オフィスのセキュリティ対策術

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  |
+------+
|  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」テーブルの行を「tbl2s」テーブルのnameを検索条件にして取得したいのですが
どのように記述すれば良いのでしょうか?
例えば「sato」を条件にした場合は、

テーブル「tbl1s」
+------+
|  id  |
+------+
|  1  |
+------+
|  3  |
+------+

を取得したいです。

A 回答 (1件)

普通に考えれば、tbl1sのidではなくtbl1s_tbl2sのtbl1_idを抜く方が


現実的だと思います

select distinct tbl1_id
from tbl1s_tbl2s
inner join tbl2s on tbl1s_tbl2s.tbl2_id=tbl2s.id
and tbl2s.name='sato'

どうしてもというのだったら冗長ですが

select distinct tbl1s.id
from tbl1s
inner join tbl1s_tbl2s on tbl1s.id=tbl1s_tbl2s.tbl1_id
inner join tbl2s on tbl1s_tbl2s.tbl2_id=tbl2s.id
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
下の回答もあわせて、そのやり方を参考にしてできました。
ありがとうございます。

お礼日時:2010/01/07 16:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!