回答編集履歴

5

コード修正

2016/08/07 04:33

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  WHEN ingredient_code = 'abc' OR ingredient_code ='xxx'
24
24
 
25
- THEN 0 ELSE 1
25
+ THEN 1 ELSE 0
26
26
 
27
27
  END
28
28
 

4

コード修正

2016/08/07 04:33

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -40,11 +40,9 @@
40
40
 
41
41
  GROUP BY menu_code
42
42
 
43
- HAVING
43
+ HAVING SUM(CASE WHEN ingredient_code = 'abc' THEN 1 ELSE 0 END) = 1
44
44
 
45
- SUM(CASE WHEN ingredient_code = 'abc' THEN 1 ELSE 0 END) *
46
-
47
- SUM(CASE WHEN ingredient_code = 'xxx' THEN 1 ELSE 0 END) > 0
45
+ AND SUM(CASE WHEN ingredient_code = 'xxx' THEN 1 ELSE 0 END) = 1
48
46
 
49
47
 
50
48
 

3

コード修正

2016/08/06 18:56

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  SUM(CASE WHEN ingredient_code = 'abc' THEN 1 ELSE 0 END) *
46
46
 
47
- SUM(CASE WHEN ingredient_code = 'xxx' THEN 1 ELSE 0 END) = 0
47
+ SUM(CASE WHEN ingredient_code = 'xxx' THEN 1 ELSE 0 END) > 0
48
48
 
49
49
 
50
50
 

2

修正

2016/08/06 18:54

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -1,4 +1,6 @@
1
+ **当初投稿したものが間違っていたため再考したのですが、ましなコードは浮かびませんでした。
2
+
1
- **以下のコードでは目的を果たせません。失礼しました。再考中**
3
+ ごり押し気味な回答になっていす。すみません**
2
4
 
3
5
 
4
6
 
@@ -20,16 +22,32 @@
20
22
 
21
23
  WHEN ingredient_code = 'abc' OR ingredient_code ='xxx'
22
24
 
23
- THEN 1 ELSE 0
25
+ THEN 0 ELSE 1
24
26
 
25
27
  END
26
28
 
29
+ ) >= 2 /* この2は比較条件の数 */
30
+
31
+ ```
32
+
33
+ または
34
+
35
+ ```SQL
36
+
37
+ SELECT menu_code
38
+
27
- ) > 0
39
+ FROM table
40
+
41
+ GROUP BY menu_code
42
+
43
+ HAVING
44
+
45
+ SUM(CASE WHEN ingredient_code = 'abc' THEN 1 ELSE 0 END) *
46
+
47
+ SUM(CASE WHEN ingredient_code = 'xxx' THEN 1 ELSE 0 END) = 0
48
+
49
+
28
50
 
29
51
  ```
30
52
 
31
53
  テーブル設計やデータ件数とその偏りに大きく影響を受けると思うので、サブクエリ利用より常に早いか?と問われると怪しいです(むしろサブクエリ利用のほうが早いケースが多いかも)
32
-
33
-
34
-
35
- ※havingになじみが無ければ、sumをselectの所に持ってきてwhereでtureチェックでもいけるかも

1

修正

2016/08/06 18:53

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -1,3 +1,7 @@
1
+ **以下のコードでは目的を果たせません。失礼しました。再考中**
2
+
3
+
4
+
1
5
  サブクエリを使わないとなると、こんな感じでしょうか?
2
6
 
3
7
  (動作確認してません)