回答編集履歴
4
追記
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を修正
test
CHANGED
@@ -8,14 +8,8 @@
|
|
8
8
|
)
|
9
9
|
INSERT INTO test VALUES (
|
10
10
|
4,
|
11
|
-
CASE
|
12
|
-
|
11
|
+
COALESCE((SELECT val1 FROM x),'nullでした'),
|
13
|
-
ELSE x.val1
|
14
|
-
END,
|
15
|
-
CASE
|
16
|
-
|
12
|
+
COALESCE((SELECT val2 FROM x),'nullでした'),
|
17
|
-
ELSE x.val2
|
18
|
-
END
|
19
13
|
);
|
20
14
|
```
|
21
15
|
|
2
誤字修正
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
with句(CTE 共通テーブル式)を使うのはどうでしょうか。
|
2
2
|
|
3
|
-
|
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
誤字修正
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
|