質問するログイン新規登録

回答編集履歴

2

SQLのコメントを追記

2015/08/28 01:03

投稿

kutsulog
kutsulog

スコア985

answer CHANGED
@@ -10,6 +10,7 @@
10
10
  SRC.ID
11
11
  FROM tb_items SRC
12
12
  JOIN tb_filter_keyword FIL
13
+ /* フィルタで指定されたカラムにキーワードが含まれることのチェック */
13
14
  ON FIL.Type = 'Name' AND locate(FIL.Keyword, SRC.Name) > 0
14
15
  OR FIL.Type = 'Brand' AND locate(FIL.Keyword, SRC.Brand) > 0
15
16
  OR FIL.Type = 'Category' AND locate(FIL.keyword, SRC.Category) > 0
@@ -28,19 +29,23 @@
28
29
  FROM (
29
30
  SELECT
30
31
  ID
32
+ /* 最大値が0(フィルタにデータかかかっていない)場合にFALSE,それ以外はTRUEを設定 */
31
33
  , CASE WHEN MAX(TMP.INC) = 0 THEN FALSE ELSE TRUE END Status
32
34
  FROM (
33
35
  SELECT
34
36
  ID
37
+ /* フィルタに引っかかったデータIDに1を設定 */
35
38
  , 1 INC
36
39
  FROM tb_items SRC
37
40
  JOIN tb_filter_keyword FIL
41
+ /* フィルタで指定されたカラムにキーワードが含まれることのチェック */
38
42
  ON FIL.Type = 'Name' AND locate(FIL.Keyword, SRC.Name) > 0
39
43
  OR FIL.Type = 'Brand' AND locate(FIL.Keyword, SRC.Brand) > 0
40
44
  OR FIL.Type = 'Category' AND locate(FIL.keyword, SRC.Category) > 0
41
45
  UNION ALL
42
46
  SELECT
43
47
  ID
48
+ /* すべてのIDでデータが見つからない場合の初期値(0)を設定 */
44
49
  , 0
45
50
  FROM tb_items
46
51
  ) TMP

1

UPDATEを1回で行うSQLを追加

2015/08/28 01:03

投稿

kutsulog
kutsulog

スコア985

answer CHANGED
@@ -16,4 +16,37 @@
16
16
  ) TMP
17
17
  WHERE ID = TMP.ID
18
18
 
19
+ ```
20
+
21
+ ---
22
+
23
+ UPDATE一回で済ませたいならこちら
24
+
25
+ ```SQL
26
+ UPDATE tb_items
27
+ SET Status = TMP2.Status
28
+ FROM (
29
+ SELECT
30
+ ID
31
+ , CASE WHEN MAX(TMP.INC) = 0 THEN FALSE ELSE TRUE END Status
32
+ FROM (
33
+ SELECT
34
+ ID
35
+ , 1 INC
36
+ FROM tb_items SRC
37
+ JOIN tb_filter_keyword FIL
38
+ ON FIL.Type = 'Name' AND locate(FIL.Keyword, SRC.Name) > 0
39
+ OR FIL.Type = 'Brand' AND locate(FIL.Keyword, SRC.Brand) > 0
40
+ OR FIL.Type = 'Category' AND locate(FIL.keyword, SRC.Category) > 0
41
+ UNION ALL
42
+ SELECT
43
+ ID
44
+ , 0
45
+ FROM tb_items
46
+ ) TMP
47
+ GROUP BY
48
+ ID
49
+ ) TMP2
50
+ WHERE ID = TMP2.ID
51
+
19
52
  ```