本来ならばexampleテーブルに正規化して持たせたかったのですが、チェックボックス
いや、むしろ今が正規化されていて、もし example テーブルに「check1, check2, check3, ...」などともたせるとむしろ正規化されていないと思います。
exampleテーブルの一覧を出す際に、example_checkboxでチェックされているか否かの
条件を入れたいのですが、exampleとexample_checkboxは1対多であるため、joinを使うと
example_checkboxの数分結果が返ってきてしまうものと想定しておりますが、
example_checkbox が下記のようなテーブルなのだとして・・・(example_check は選択されていたチェックボックスの値)
sql
1create table example_checkbox(
2 example_number int unsigned not null,
3 example_check int unsigned not null,
4 primary key (example_number, example_check)
5);
以下のように結合する分には重複は現れないと思いますけど?
select E.*
from example E
inner join example_checkbox C
on C.example_number = E.number
where
C.example_check = 3
example_checkbox テーブルは example_number と example_check で一意になるはずなので、example_check = 3
のように example_check を特定すれば、その詳細度は example テーブルと同じ(example_number ごと)だと思います。
(もし、複数の値で OR 検索、であれば話は変わりますが)
相関サブクエリで exists したり、
sql
1select E.*
2from example E
3where
4 exists (
5 select * from example_checkbox C
6 where C.example_number = E.number
7 and C.example_check in (2, 3, 4)
8 )
サブクエリを in してみたり、
sql
1select E.*
2from example E
3where
4 E.number in (
5 select example_number from example_checkbox
6 where example_check in (2, 3, 4)
7 )
group by なサブクエリを join したり、
sql
1select E.*
2from example E
3inner join (
4 select example_number from example_checkbox
5 where example_check in (2, 3, 4)
6 group by example_number
7) C
8on C.example_number = E.number
いずれも試してはいないので、上手くできなかったらごめんなさい。
サブクエリを使わずに group by や distinct で重複行を排除するという方法も考えられると思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/11 07:50
2015/08/11 08:29
2015/08/11 09:26