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

質問編集履歴

1

コピペミスでUPDATE文のSETを複数個書いてたので修正しました。本文に記載の通り、SQLServer,PostgreSQLでは正しく動くことを確認済みです。

2018/08/02 08:22

投稿

ry188472
ry188472

スコア74

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
- , SET Col2 = (SELECT C FROM V2 )
16
+ , Col2 = (SELECT C FROM V2 )
16
- , SET Col3 = (SELECT B FROM V1 )
17
+ , Col3 = (SELECT B FROM V1 )
17
- , SET Col4 = (SELECT D FROM V2 )
18
+ , Col4 = (SELECT D FROM V2 )
18
19
  ```
19
20
 
20
21
  ### 補足情報(FW/ツールのバージョンなど)