回答編集履歴

15

コードミスの訂正

2016/08/08 10:16

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -78,7 +78,9 @@
78
78
 
79
79
  HAVING
80
80
 
81
+ MAX(menu_code) = MIN(menu_code) -- 指摘を受け修正
82
+
81
- COUNT(*) = COUNT(menu_code)
83
+ AND COUNT(*) = COUNT(menu_code)
82
84
 
83
85
  ```
84
86
 

14

コード再修正

2016/08/08 10:16

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -78,9 +78,7 @@
78
78
 
79
79
  HAVING
80
80
 
81
- MAX(CASE WHEN menu_code IS NOT NULL THEN id2 ELSE '0' END)
82
-
83
- = MIN(CASE WHEN menu_code IS NOT NULL THEN id2 ELSE '0' END)
81
+ COUNT(*) = COUNT(menu_code)
84
82
 
85
83
  ```
86
84
 

13

コードミス修正

2016/08/06 22:12

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
  LEFT JOIN TABLE T2
76
76
 
77
- ON T.cond = T2.ingredient_code
77
+ ON T2.ingredient_code = T1.cond
78
78
 
79
79
  HAVING
80
80
 

12

コード追加

2016/08/06 21:36

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -38,7 +38,55 @@
38
38
 
39
39
 
40
40
 
41
+ **・追記**
42
+
43
+ 禁を犯してFROM句でサブクエリを用いてみました。
44
+
45
+ すごく苦しいコード・・・orz
46
+
47
+ ```SQL
48
+
49
+ SELECT
50
+
51
+ MAX(menu_code) AS menu_code
52
+
53
+ FROM
54
+
55
+ (
56
+
57
+ SELECT
58
+
59
+ 'abc' AS cond
60
+
61
+ UNION ALL
62
+
63
+ SELECT
64
+
65
+ 'xxx'
66
+
67
+ UNION ALL
68
+
69
+ SELECT
70
+
71
+ 'yyy'
72
+
73
+ ) T1
74
+
75
+ LEFT JOIN TABLE T2
76
+
77
+ ON T.cond = T2.ingredient_code
78
+
79
+ HAVING
80
+
81
+ MAX(CASE WHEN menu_code IS NOT NULL THEN id2 ELSE '0' END)
82
+
83
+ = MIN(CASE WHEN menu_code IS NOT NULL THEN id2 ELSE '0' END)
84
+
85
+ ```
86
+
87
+
88
+
41
- ###追記
89
+ ###補足
42
90
 
43
91
  ちなみに**FROM句**におけるサブクエリを結合する方法を用いると、
44
92
 

11

インデント修正

2016/08/06 21:33

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  MAX(menu_code) = MIN(menu_code)
30
30
 
31
- AND COUNT(*) >= 3 -- 条件の数(※ただし「aaa」が2回など同一条件が複数指定されるとNG)
31
+ AND COUNT(*) >= 3 -- 条件の数(※ただし「aaa」が2回など同一条件が複数指定されるとNG)
32
32
 
33
33
  ```
34
34
 

10

コメント修正

2016/08/06 19:36

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  MAX(menu_code) = MIN(menu_code)
30
30
 
31
- AND COUNT(*) >= 3 -- 条件の数(※ただし「aaa」など同一条件が指定されるとNG)
31
+ AND COUNT(*) >= 3 -- 条件の数(※ただし「aaa」が2回など同一条件が複数指定されるとNG)
32
32
 
33
33
  ```
34
34
 

9

追記・ソース修正

2016/08/06 19:33

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
 
8
8
 
9
- **コード存在しない場合は駄目した、うむむ**
9
+ **もう少し考えてみます、一応下記大丈夫です。
10
+
11
+ レコードが取れない条件を入力された際の対応がどうしても思いつかない・・・**
10
12
 
11
13
  ```SQL
12
14
 
@@ -24,7 +26,9 @@
24
26
 
25
27
  HAVING
26
28
 
27
- MAX(menu_code) = MIN(menu_code)
29
+ MAX(menu_code) = MIN(menu_code)
30
+
31
+ AND COUNT(*) >= 3 -- 条件の数(※ただし「aaa」など同一の条件が指定されてるとNG)
28
32
 
29
33
  ```
30
34
 

8

追記(検討中)

2016/08/06 19:32

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -6,9 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- 再度修正これで多分いけます。
9
+ **コードが存在しない場合は駄目でしたうむむ**
10
-
11
-
12
10
 
13
11
  ```SQL
14
12
 

7

追記3

2016/08/06 19:18

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -35,3 +35,9 @@
35
35
  ただ集約関数使いまくるのとHAVING句を使うからむしろパフォーマンスが悪いかも・・・
36
36
 
37
37
 
38
+
39
+ ###追記
40
+
41
+ ちなみに**FROM句**におけるサブクエリを結合する方法を用いると、
42
+
43
+ **WHERE句**でのサブクエリ(相関副問い合わせ)と比べ高速に動作する機会は多いと思われます。

6

コード修正

2016/08/06 19:11

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -6,9 +6,9 @@
6
6
 
7
7
 
8
8
 
9
- 修正してみした
9
+ 再度修正、これで多分いけ
10
10
 
11
- **※これもあかん気がする・・・以外に難しい・・・。ちょっと実際試してきます**
11
+
12
12
 
13
13
  ```SQL
14
14
 
@@ -22,23 +22,11 @@
22
22
 
23
23
  WHERE
24
24
 
25
- ingredient_code IN ('abc', 'xxx')
25
+ ingredient_code IN ('abc', 'xxx', 'yyy')
26
26
 
27
27
  HAVING
28
28
 
29
- COUNT(*) = SUM(
30
-
31
- CASE
32
-
33
- WHEN MAX(menu_code) = MIN(menu_code)
29
+ MAX(menu_code) = MIN(menu_code)
34
-
35
- THEN 1
36
-
37
- ELSE 0
38
-
39
- END
40
-
41
- )
42
30
 
43
31
  ```
44
32
 

5

追記

2016/08/06 18:57

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -7,6 +7,8 @@
7
7
 
8
8
 
9
9
  修正してみました。
10
+
11
+ **※これもあかん気がする・・・以外に難しい・・・。ちょっと実際試してきます**
10
12
 
11
13
  ```SQL
12
14
 

4

ソース修正

2016/08/06 18:50

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  WHERE
22
22
 
23
- ngredient_code IN ('abc', 'xxx')
23
+ ingredient_code IN ('abc', 'xxx')
24
24
 
25
25
  HAVING
26
26
 

3

修正

2016/08/06 18:45

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -7,6 +7,8 @@
7
7
 
8
8
 
9
9
  修正してみました。
10
+
11
+ ```SQL
10
12
 
11
13
  SELECT
12
14
 
@@ -40,6 +42,6 @@
40
42
 
41
43
 
42
44
 
43
- ただ集約とHAVING句を使うからむしろパフォーマンスが悪いかも・・・
45
+ ただ集約関数使いまくるのとHAVING句を使うからむしろパフォーマンスが悪いかも・・・
44
46
 
45
47
 

2

ソースミス修正

2016/08/06 18:44

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -6,31 +6,35 @@
6
6
 
7
7
 
8
8
 
9
- **※普通にミスってた再考します・・・**
10
-
11
- ```SQL
9
+ 修正してみました。
12
10
 
13
11
  SELECT
14
12
 
15
- MAX(menu_code) AS menu_code
13
+ MAX(menu_code) AS menu_code
16
14
 
17
15
  FROM
18
16
 
19
- table
17
+ TABLE
20
18
 
21
19
  WHERE
22
20
 
23
- ngredient_code IN ('abc', 'xxx')
21
+ ngredient_code IN ('abc', 'xxx')
24
-
25
-
26
-
27
- GROUP BY
28
-
29
- ingredient_code
30
22
 
31
23
  HAVING
32
24
 
25
+ COUNT(*) = SUM(
26
+
27
+ CASE
28
+
33
- MAX(menu_code) = MIN(menu_code)
29
+ WHEN MAX(menu_code) = MIN(menu_code)
30
+
31
+ THEN 1
32
+
33
+ ELSE 0
34
+
35
+ END
36
+
37
+ )
34
38
 
35
39
  ```
36
40
 

1

追記

2016/08/06 18:43

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
 
6
6
 
7
+
8
+
7
- 動作確認は未実施
9
+ **普通にミスってた再考します・・・**
8
10
 
9
11
  ```SQL
10
12
 
@@ -35,3 +37,5 @@
35
37
 
36
38
 
37
39
  ただ集約とHAVING句を使うからむしろパフォーマンスが悪いかも・・・
40
+
41
+