回答編集履歴
4
追記
test
CHANGED
@@ -29,3 +29,65 @@
|
|
29
29
|
WHERE条件指定をしていないので、
|
30
30
|
|
31
31
|
全レコードが洗い替え対象になってしまいますが…^^;
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
###追記
|
36
|
+
|
37
|
+
コメントを受け追記しときます。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
- COALESCEについて
|
42
|
+
|
43
|
+
こちらはご存知でしたら読み飛ばしてください。
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
**COALESCE**とは標準SQLで定義されている関数(なのでMySQL、SQL Server、Oracleでも利用可)で、
|
48
|
+
|
49
|
+
機能としては引数リストの内**左から最初にNULLでなかった値**を返します。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
そのためサンプルで掲示した、
|
54
|
+
|
55
|
+
```SQL
|
56
|
+
|
57
|
+
COALESCE(visiting_date, '')
|
58
|
+
|
59
|
+
```
|
60
|
+
|
61
|
+
というのは**visiting_dateがNULLでない**ならvisiting_dateの値を、
|
62
|
+
|
63
|
+
**visiting_dateがNULL**なら''を返します。
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
- 利用意図について
|
68
|
+
|
69
|
+
当方がMySQLの仕様について熟知してないのでもしかしたら意味ないかもですが、
|
70
|
+
|
71
|
+
visiting_dateのNULLと''が異なる値と解釈される場合、
|
72
|
+
|
73
|
+
```SQL
|
74
|
+
|
75
|
+
visiting_date = ''
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
ではisiting_dateがNULLの場合に**更新対象外**とされるため、
|
80
|
+
|
81
|
+
COALESCEをかませてNULL → ''に変換することでNULLと''をまとめて評価できるようにしています。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
つまるところtakasima20さんの最初に掲示されたSQLの
|
86
|
+
|
87
|
+
```SQL
|
88
|
+
|
89
|
+
visiting_date is null or visiting_date = ''
|
90
|
+
|
91
|
+
```
|
92
|
+
|
93
|
+
上記条件と振る舞いは同様となります。
|
3
スペルミス修正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
(CASE
|
14
14
|
|
15
|
-
WHEN COALEC
|
15
|
+
WHEN COALESCE(visiting_date, '') = '' THEN '未訪問'
|
16
16
|
|
17
17
|
WHEN visiting_date <= DATE_ADD(CURRENT_DATE, INTERVAL - 1 MONTH) AND customer = '田中' THEN '未訪問'
|
18
18
|
|
2
ソース修正
test
CHANGED
@@ -16,10 +16,16 @@
|
|
16
16
|
|
17
17
|
WHEN visiting_date <= DATE_ADD(CURRENT_DATE, INTERVAL - 1 MONTH) AND customer = '田中' THEN '未訪問'
|
18
18
|
|
19
|
-
ELSE
|
19
|
+
ELSE '訪問済み'
|
20
20
|
|
21
21
|
END
|
22
22
|
|
23
23
|
)
|
24
24
|
|
25
25
|
```
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
WHERE条件指定をしていないので、
|
30
|
+
|
31
|
+
全レコードが洗い替え対象になってしまいますが…^^;
|
1
ソース修正
test
CHANGED
@@ -16,6 +16,10 @@
|
|
16
16
|
|
17
17
|
WHEN visiting_date <= DATE_ADD(CURRENT_DATE, INTERVAL - 1 MONTH) AND customer = '田中' THEN '未訪問'
|
18
18
|
|
19
|
-
ELSE state
|
19
|
+
ELSE state
|
20
|
+
|
21
|
+
END
|
22
|
+
|
23
|
+
)
|
20
24
|
|
21
25
|
```
|