Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

update文にfrom句!?

こんな感じのSQL文があった。

UPDATE table_a
SET    column_a = 1
FROM
       ( SELECT column_b,
                column_c,
                column_d
         FROM   table_b
       ) table_b
WHERE  column_a = 2
   AND table_b.column_b   = table_a.column_b
   AND table_b.column_c   = table_a.column_c
   AND table_b.column_d   = table_a.column_d

なんじゃこりゃ!?っと思ったけど、PostgreSQLの非標準拡張らしい。

UPDATE table SET column = expression [, ...] [ FROM fromlist ] [ WHERE condition ]

fromlist A Postgres non-standard extension to allow columns from other tables to appear in the WHERE condition. WHERE 条件に他のテーブル上のカラムを指定できるように する Postgresの非標準的拡 張。