回答編集履歴

2

調整

2017/08/22 07:34

投稿

yambejp
yambejp

スコア114769

test CHANGED
@@ -65,3 +65,59 @@
65
65
  当てはめると結果はどれをほしいのでしょうか?
66
66
 
67
67
  m_id単位で集計したいのでしょうか?
68
+
69
+
70
+
71
+ # 調整
72
+
73
+ インデックスの付け直しおよびexistsをつかってこれでどうでしょう?
74
+
75
+ ```SQL
76
+
77
+ create table master(m_id int,name varchar(20),p_id int,e_id int,index(m_id,p_id,e_id));
78
+
79
+ insert into master values(1,'会社名1',1,1),(2,'会社名2',1,3),(3,'会社名3',2,1);
80
+
81
+
82
+
83
+ create table master_form(m_id int,f_id int,index(m_id,f_id));
84
+
85
+ insert into master_form values(1,2),(2,1),(2,2),(3,1),(3,3);
86
+
87
+
88
+
89
+ create table form(f_id int,f_name varchar(20),index(f_id,f_name));
90
+
91
+ insert into form values(1,'正社員'),(2,'派遣'),(3,'アルバイト');
92
+
93
+
94
+
95
+ create table em(e_id int,e_name varchar(20),index(e_id,e_name));
96
+
97
+ insert into em values(1,'固定給'),(2,'時給'),(3,'歩合');
98
+
99
+
100
+
101
+ create table pre(p_id int,p_name varchar(20),index(p_id,p_name));
102
+
103
+ insert into pre values(1,'東京'),(2,'大阪'),(3,'名古屋');
104
+
105
+
106
+
107
+ ```
108
+
109
+ ```SQL
110
+
111
+ select * from master as m
112
+
113
+ where 1
114
+
115
+ and 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)
116
+
117
+ and exists(select e_id from em as e where not e.e_name='時給' and not e_name='歩合' and e.e_id=m.e_id)
118
+
119
+ and exists(select p_id from pre as p where p.p_name='東京' and p.p_id=m.p_id)
120
+
121
+
122
+
123
+ ```

1

追記

2017/08/22 07:34

投稿

yambejp
yambejp

スコア114769

test CHANGED
@@ -1,3 +1,67 @@
1
1
  master_formの使い所がイマイチわかりません
2
2
 
3
3
  masterにあるform_idと整合性がとれていないのでは?
4
+
5
+
6
+
7
+ # 追記
8
+
9
+ formはmaster_form経由でmasterとつながるのですね
10
+
11
+ idやnameなどかぶっているものが多いのでちょっと整理して以下例示します
12
+
13
+ ```SQL
14
+
15
+ create table master(m_id int,name varchar(20),p_id int,e_id int);
16
+
17
+ insert into master values(1,'会社名1',1,1),(2,'会社名2',1,3),(3,'会社名3',2,1);
18
+
19
+
20
+
21
+ create table master_form(m_id int,f_id int);
22
+
23
+ insert into master_form values(1,2),(2,1),(2,2),(3,1),(3,3);
24
+
25
+
26
+
27
+ create table form(f_id int,f_name varchar(20));
28
+
29
+ insert into form values(1,'正社員'),(2,'派遣'),(3,'アルバイト');
30
+
31
+
32
+
33
+ create table em(e_id int,e_name varchar(20));
34
+
35
+ insert into em values(1,'固定給'),(2,'時給'),(3,'歩合');
36
+
37
+
38
+
39
+ create table pre(p_id int,p_name varchar(20));
40
+
41
+ insert into pre values(1,'東京'),(2,'大阪'),(3,'名古屋');
42
+
43
+ ```
44
+
45
+ こうであれば、検索は以下になります
46
+
47
+ ```SQL
48
+
49
+ select * from master as m
50
+
51
+ inner join master_form as mf on m.m_id=mf.m_id
52
+
53
+ inner join form as f on mf.f_id=f.f_id
54
+
55
+ inner join em as e on m.e_id=e.e_id
56
+
57
+ inner join pre as p on m.p_id=p.p_id
58
+
59
+
60
+
61
+ ```
62
+
63
+ このデータから複数キーワード:「東京 派遣」、除外キーワード:「時給 歩合」 を
64
+
65
+ 当てはめると結果はどれをほしいのでしょうか?
66
+
67
+ m_id単位で集計したいのでしょうか?