master_formの使い所がイマイチわかりません
masterにあるform_idと整合性がとれていないのでは?
追記
formはmaster_form経由でmasterとつながるのですね
idやnameなどかぶっているものが多いのでちょっと整理して以下例示します
SQL
1create table master(m_id int,name varchar(20),p_id int,e_id int);
2insert into master values(1,'会社名1',1,1),(2,'会社名2',1,3),(3,'会社名3',2,1);
3
4create table master_form(m_id int,f_id int);
5insert into master_form values(1,2),(2,1),(2,2),(3,1),(3,3);
6
7create table form(f_id int,f_name varchar(20));
8insert into form values(1,'正社員'),(2,'派遣'),(3,'アルバイト');
9
10create table em(e_id int,e_name varchar(20));
11insert into em values(1,'固定給'),(2,'時給'),(3,'歩合');
12
13create table pre(p_id int,p_name varchar(20));
14insert into pre values(1,'東京'),(2,'大阪'),(3,'名古屋');
こうであれば、検索は以下になります
SQL
1select * from master as m
2inner join master_form as mf on m.m_id=mf.m_id
3inner join form as f on mf.f_id=f.f_id
4inner join em as e on m.e_id=e.e_id
5inner join pre as p on m.p_id=p.p_id
6
このデータから複数キーワード:「東京 派遣」、除外キーワード:「時給 歩合」 を
当てはめると結果はどれをほしいのでしょうか?
m_id単位で集計したいのでしょうか?
調整
インデックスの付け直しおよびexistsをつかってこれでどうでしょう?
SQL
1create table master(m_id int,name varchar(20),p_id int,e_id int,index(m_id,p_id,e_id));
2insert into master values(1,'会社名1',1,1),(2,'会社名2',1,3),(3,'会社名3',2,1);
3
4create table master_form(m_id int,f_id int,index(m_id,f_id));
5insert into master_form values(1,2),(2,1),(2,2),(3,1),(3,3);
6
7create table form(f_id int,f_name varchar(20),index(f_id,f_name));
8insert into form values(1,'正社員'),(2,'派遣'),(3,'アルバイト');
9
10create table em(e_id int,e_name varchar(20),index(e_id,e_name));
11insert into em values(1,'固定給'),(2,'時給'),(3,'歩合');
12
13create table pre(p_id int,p_name varchar(20),index(p_id,p_name));
14insert into pre values(1,'東京'),(2,'大阪'),(3,'名古屋');
15
SQL
1select * from master as m
2where 1
3and exists(select m_id from master_form as mf inner join form as f on mf.f_id=f.f_id and f.f_name='派遣' where mf.m_id=m.m_id)
4and exists(select e_id from em as e where not e.e_name='時給' and not e_name='歩合' and e.e_id=m.e_id)
5and exists(select p_id from pre as p where p.p_name='東京' and p.p_id=m.p_id)
6