回答編集履歴
5
追記
answer
CHANGED
@@ -22,4 +22,7 @@
|
|
22
22
|
INSERT INTO wrk(
|
23
23
|
a, b, c, d
|
24
24
|
)
|
25
|
-
```
|
25
|
+
```
|
26
|
+
因みに使用しているのが9.5なのに、upsertが使えないとはどういう事ですか?
|
27
|
+
upsertというコマンドは9.5以降にもありませんよ。
|
28
|
+
insert構文が拡張されてupsertと同等の事が出来るという事ですので。
|
4
訂正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
`RETURNING (temp.a, temp.b)`だと型が
|
1
|
+
`RETURNING (temp.a, temp.b)`だと型が不明で、`FROM upsert`部分でエラーになっているかもしれません。
|
2
2
|
以下の様にRETURNING でテーブルを返却するようにしてみて下さい。
|
3
3
|
```SQL
|
4
4
|
WITH upsert AS(
|
3
追記
answer
CHANGED
@@ -15,4 +15,11 @@
|
|
15
15
|
FROM temp
|
16
16
|
WHERE (a, b) NOT IN
|
17
17
|
(SELECT a, b FROM upsert)
|
18
|
+
```
|
19
|
+
後は、wrkとtempの項目の並びが一致してないと実行時のエラーとなります。
|
20
|
+
その場合は、以下の様に対比する項目を明確にします。
|
21
|
+
```SQL
|
22
|
+
INSERT INTO wrk(
|
23
|
+
a, b, c, d
|
24
|
+
)
|
18
25
|
```
|
2
修正
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
1
|
+
`RETURNING (temp.a, temp.b)`だと型が無いので、`FROM upsert`部分でエラーなのでしょう。
|
2
|
-
以下の様にRETURNING で
|
2
|
+
以下の様にRETURNING でテーブルを返却するようにしてみて下さい。
|
3
3
|
```SQL
|
4
4
|
WITH upsert AS(
|
5
5
|
UPDATE wrk
|
1
訂正
answer
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
syntaxエラー
|
1
|
+
syntaxエラーですか?
|
2
|
+
以下の様にRETURNING で全てを返却するようにしてみて下さい。
|
2
3
|
```SQL
|
4
|
+
WITH upsert AS(
|
3
|
-
|
5
|
+
UPDATE wrk
|
4
|
-
|
6
|
+
SET c = temp.c,
|
7
|
+
d = temp.d
|
5
8
|
FROM temp
|
6
|
-
|
9
|
+
WHERE temp.a = wrk.a
|
7
|
-
|
10
|
+
AND temp.b = wrk.b
|
8
|
-
```SQL
|
9
|
-
|
11
|
+
RETURNING (wrk.*)
|
10
|
-
a, b, c, d
|
11
12
|
)
|
13
|
+
INSERT INTO wrk
|
12
14
|
SELECT a, b, c, d
|
13
15
|
FROM temp
|
14
16
|
WHERE (a, b) NOT IN
|