#2回答者です。
表のデータ例、得たい結果例などを示してもらえると、より具体的な回答ができるのですが。。。
都道府県名(?)が入る表の検索時、結果は1行のみの返却でないと、何か不都合があるのですか?例えば、都道府県が3件あった場合、検索結果が3行になると、不都合があるのでしょうか?
(親id,親データ,都道府県1,都道府県2,都道府県3)といった1行で得られないと、不都合はありますか?
(親id,親データ,親毎の子通番,都道府県1)
(親id,親データ,親毎の子通番,都道府県2)
(親id,親データ,親毎の子通番,都道府県3)
といった3行で得る方法では、不都合があるのでしょうか?
>このような時データベースはどのように組むのが一般的なんでしょうか?
検索条件の指定方法等が不明ですが、47都道府県用に47列を持つというのは、一般的ではないです。逆に1行で1都道府県という現状の方が、より一般的な使い方です。
MySQLのバージョンが不明ですが、SQLの例を示します。MySQL 4.1以降なら、動くと思います。
<表定義例>
create table 親表
(親id int primary key auto_increment,
data1 varchar(30),
data2 int);
create table 子表
(親id int,
子通番 int auto_increment,
都道府県 varchar(4),
primary key(親id,子通番));
<テスト用データ>
insert into 親表 values
(null,'a',1),
(null,'b',2),
(null,'c',3),
(null,'aa',1),
(null,'bb',2),
(null,'cc',3),
(null,'dd',4);
insert into 子表 values
(1,null,'北海道'),
(2,null,'北海道'),
(2,null,'沖縄県'),
(3,null,'沖縄県'),
(3,null,'北海道'),
(3,null,'東京都'),
(4,null,'北海道'),
(5,null,'北海道'),
(5,null,'沖縄県'),
(6,null,'沖縄県'),
(6,null,'北海道'),
(6,null,'東京都'),
(7,null,'沖縄県'),
(7,null,'北海道'),
(7,null,'東京都'),
(7,null,'神奈川県');
<検索例>
-- 全件検索
select o.親id,data1,data2,都道府県
from 親表 as o,子表 as m
where o.親id=m.親id
order by o.親id,子通番
;
-- 条件中のいずれかの都道府県があれば検索
select o.親id,data1,data2,都道府県
from 親表 as o,子表 as m
where o.親id=m.親id
and 都道府県 in('沖縄県','北海道','東京都')
order by o.親id,子通番
;
-- 条件中のすべての都道府県が含まれていれば検索
select *
from 親表
where 親id in(
select o.親id
from 親表 as o,子表 as m
where o.親id=m.親id
and 都道府県 in('沖縄県','北海道','東京都')
group by o.親id
having count(distinct 都道府県)=3)
;
お礼
とても参考になる回答有難うございます。 最終的に親、子のリレーショナル関係は chukenkenkouさんの作成例のような感じで作成しました。 検索例もつけて頂いて有難うございます。