回答編集履歴

4

追記

2023/08/11 01:35

投稿

hqf00342
hqf00342

スコア394

test CHANGED
@@ -9,7 +9,18 @@
9
9
  INSERT INTO test VALUES (
10
10
  4,
11
11
  COALESCE((SELECT val1 FROM x),'nullでした'),
12
- COALESCE((SELECT val2 FROM x),'nullでした'),
12
+ COALESCE((SELECT val2 FROM x),'nullでした')
13
13
  );
14
14
  ```
15
15
 
16
+ SELECTを減らしたいならNULLチェックもwith句に移動します。
17
+ ```sql
18
+ WITH x AS (
19
+ SELECT
20
+ COALESCE(val1,'nullでした') as v1,
21
+ COALESCE(val2,'nullでした') as v2
22
+ FROM test WHERE id = 1
23
+ )
24
+ INSERT INTO test SELECT 4,x.v1,x.v2 FROM x;
25
+ ```
26
+

3

動作しないSQLを修正

2023/08/10 03:38

投稿

hqf00342
hqf00342

スコア394

test CHANGED
@@ -8,14 +8,8 @@
8
8
  )
9
9
  INSERT INTO test VALUES (
10
10
  4,
11
- CASE
12
- WHEN x.val1 IS NULL THEN 'nullでした'
11
+ COALESCE((SELECT val1 FROM x),'nullでした'),
13
- ELSE x.val1
14
- END,
15
- CASE
16
- WHEN x.val2 IS NULL THEN 'nullでした'
12
+ COALESCE((SELECT val2 FROM x),'nullでした'),
17
- ELSE x.val2
18
- END
19
13
  );
20
14
  ```
21
15
 

2

誤字修正

2023/08/10 03:34

投稿

hqf00342
hqf00342

スコア394

test CHANGED
@@ -1,6 +1,6 @@
1
1
  with句(CTE 共通テーブル式)を使うのはどうでしょうか。
2
2
 
3
- 以下ではサブクエリに「x」という名前をつけ先に取得します。
3
+ 動くか試してませんが、サブクエリに「x」という名前をつけ先に取得します。
4
4
 
5
5
  ```sql
6
6
  WITH x AS (
@@ -17,10 +17,5 @@
17
17
  ELSE x.val2
18
18
  END
19
19
  );
20
+ ```
20
21
 
21
- ```
22
- (このCASE文はCOALESCE使ったほうがいいですね。)
23
-
24
- 同じテーブル、同じ条件だったのでx1つにまとめましたが、
25
- 違うテーブル違う条件なら、with句を複数重ねることができます。
26
-

1

誤字修正

2023/08/10 03:25

投稿

hqf00342
hqf00342

スコア394

test CHANGED
@@ -5,7 +5,7 @@
5
5
  ```sql
6
6
  WITH x AS (
7
7
  SELECT val1,val2 FROM test WHERE id = 1
8
- ),
8
+ )
9
9
  INSERT INTO test VALUES (
10
10
  4,
11
11
  CASE