質問編集履歴
1
コピペミスでUPDATE文のSETを複数個書いてたので修正しました。本文に記載の通り、SQLServer,PostgreSQLでは正しく動くことを確認済みです。
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
SQLServer, PostgreSQL で、以下のようにwithを使ったUpdate文を書いています。
|
|
4
4
|
SQLServerとPostgreSQLでは下のSQLでうまく動くのですが、
|
|
5
|
-
Oracle だとwithの構文が違うようでエラー(ORA-00928)が出てしまいます。
|
|
5
|
+
Oracle だとwithの構文が違うようでエラー(ORA-00928 SELECTキーワードがありません)が出てしまいます。
|
|
6
6
|
|
|
7
7
|
WITH句の中で集計関数なり「あるグループの中で最大値のレコードを絞り込み」等をやっているのでSET句の右辺に長いサブクエリを書きたくないのですが、SQLServer, Oracle, PostgreSQL で同じSQLで短く書く方法はないでしょうか?
|
|
8
8
|
Oracleだけ別のSQLとしないと無理でしょうか?
|
|
9
|
+
|
|
9
10
|
```SQL
|
|
10
11
|
WITH
|
|
11
12
|
V1 AS ( SELECT A,B FROM TABLE1 ) -- あるグループでの集計SELECT文
|
|
12
13
|
,V2 AS ( SELECT C,D FROM TABLE2 ) -- V1とは違うグループでの集計SELECT文
|
|
13
14
|
UPDATE TABLE3
|
|
14
15
|
SET Col1 = (SELECT A FROM V1 )
|
|
15
|
-
,
|
|
16
|
+
, Col2 = (SELECT C FROM V2 )
|
|
16
|
-
,
|
|
17
|
+
, Col3 = (SELECT B FROM V1 )
|
|
17
|
-
,
|
|
18
|
+
, Col4 = (SELECT D FROM V2 )
|
|
18
19
|
```
|
|
19
20
|
|
|
20
21
|
### 補足情報(FW/ツールのバージョンなど)
|