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

回答編集履歴

5

見直し

2020/02/11 11:40

投稿

退会済みユーザー
answer CHANGED
@@ -32,6 +32,15 @@
32
32
  テーブル家計簿に納まるデータを1行ずつ評価して、
33
33
  カラム「メモ」がNULLの場合に、
34
34
  `COALESCE(メモ,'(メモはNULLです)')`
35
+
36
+ `COALESCE(NULL,'(メモはNULLです)')`
37
+ となり、
35
- 1つ目の引数メモがNULLだから
38
+ 1つ目の引数メモがNULLだから
36
39
  2つ目の引数'(メモはNULLです)'を評価してNULLじゃないので、
37
- 結果「(メモはNULLです)」を返します。
40
+ 結果「(メモはNULLです)」を返します。
41
+
42
+ メモが'自分へのご褒美'だと、
43
+ `COALESCE(メモ,'(メモはNULLです)')`
44
+
45
+ `COALESCE('自分へのご褒美','(メモはNULLです)')`
46
+ となり、1つ目がNULLじゃないので「自分へのご褒美」を返します。

4

見直し

2020/02/11 11:40

投稿

退会済みユーザー
answer CHANGED
@@ -17,4 +17,21 @@
17
17
  などと崩すと、そんなカラムはないのでエラーになりますが、
18
18
  `COALESCE(メモ,'(メモはNULLです)') AS カモメ`
19
19
  としてもエラーにはなりません。
20
- カモメという名前のカラムとして扱われる正しい処理です。
20
+ カモメという名前のカラムとして扱われる正しい処理です。
21
+
22
+ ---
23
+
24
+ COALESCE()の引数は、複数個並べられます。
25
+ その、並べた左側から順に、NULLかどうか評価して、
26
+ NULLじゃない値であれば、その値を返します。
27
+ NULLだったばあいは、右隣の値を評価します。
28
+
29
+ `COALESCE(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'きさらぎ')`は
30
+ 適切に「きさらぎ」を返します。
31
+
32
+ テーブル家計簿に納まるデータを1行ずつ評価して、
33
+ カラム「メモ」がNULLの場合に、
34
+ `COALESCE(メモ,'(メモはNULLです)')`
35
+ の1つ目の引数メモがNULLだから
36
+ 2つ目の引数'(メモはNULLです)'を評価してNULLじゃないので、
37
+ 結果「(メモはNULLです)」を返します。

3

蛇足を削除

2020/02/11 11:37

投稿

退会済みユーザー
answer CHANGED
@@ -17,20 +17,4 @@
17
17
  などと崩すと、そんなカラムはないのでエラーになりますが、
18
18
  `COALESCE(メモ,'(メモはNULLです)') AS カモメ`
19
19
  としてもエラーにはなりません。
20
- カモメという名前のカラムとして扱われる正しい処理です。
20
+ カモメという名前のカラムとして扱われる正しい処理です。
21
-
22
- ちょっとウザく書くと
23
- ```SQL
24
- SELECT 家計簿.日付, 家計簿.費目,
25
- COALESCE(家計簿.メモ,'メモはNULLです)') AS メモ,
26
- 家計簿.入金額, 家計簿.出金額
27
- FROM 家計簿
28
- ```
29
- であり、さらにウザく書くと
30
- ```SQL
31
- SELECT 家計簿.日付 AS 日付, 家計簿.費目 AS 費目,
32
- COALESCE(家計簿.メモ,'メモはNULLです)') AS メモ,
33
- 家計簿.入金額 AS 入金額, 家計簿.出金額 AS 出金額
34
- FROM 家計簿
35
- ```
36
- です。

2

見直し

2020/02/11 11:23

投稿

退会済みユーザー
answer CHANGED
@@ -1,6 +1,10 @@
1
1
  まず、`COALESCE(メモ,'(メモはNULLです)') `に注目します。
2
2
  テーブル「家計簿」のカラム「メモ」にNULLが含まれる可能性があることを考慮して、
3
3
  NULLだった場合に「(メモはNULLです)」を返すためにそう書いているようですね。
4
+ COALESCE()で加工しないで出力すると、
5
+ テーブル「家計簿」のカラム「メモ」にNULLだった場合に空欄として出力しているのが、
6
+ 最初の画像の状態だと察します。
7
+ (SQLを実行する環境によっては、「(NULL)」と表示したり、「\N」と表示したりするケースもありますが。)
4
8
 
5
9
  次に`AS メモ`に注目します。
6
10
  この「メモ」はテーブル「家計簿」のカラム「メモ」のことではなく、

1

見直し

2020/02/11 11:19

投稿

退会済みユーザー
answer CHANGED
@@ -10,7 +10,23 @@
10
10
  `COALESCE(メモ,'(メモはNULLです)') AS メモ`
11
11
  を仮に
12
12
  `COALESCE(カモメ,'(メモはNULLです)') AS メモ`
13
- などと崩すとエラーになりますが、
13
+ などと崩すと、そんなカラムはないのでエラーになりますが、
14
14
  `COALESCE(メモ,'(メモはNULLです)') AS カモメ`
15
15
  としてもエラーにはなりません。
16
- カモメという名前のカラムとして扱われる正しい処理です。
16
+ カモメという名前のカラムとして扱われる正しい処理です。
17
+
18
+ ちょっとウザく書くと
19
+ ```SQL
20
+ SELECT 家計簿.日付, 家計簿.費目,
21
+ COALESCE(家計簿.メモ,'メモはNULLです)') AS メモ,
22
+ 家計簿.入金額, 家計簿.出金額
23
+ FROM 家計簿
24
+ ```
25
+ であり、さらにウザく書くと
26
+ ```SQL
27
+ SELECT 家計簿.日付 AS 日付, 家計簿.費目 AS 費目,
28
+ COALESCE(家計簿.メモ,'メモはNULLです)') AS メモ,
29
+ 家計簿.入金額 AS 入金額, 家計簿.出金額 AS 出金額
30
+ FROM 家計簿
31
+ ```
32
+ です。