WITH句を使った検索クエリは、
WITH xxxx AS ( ~ ) SELECT * FROM xxxx
のように、WITH句の後で、SELECT ~ FROM with句で定義した名称
と書くものだが、
INSERT INTO ~ SELECT で使用する場合、
INSERT INTO の前に書くのか?、後ろに書くのか?
どうもデータベースによって違うようである。
PostgreSQL は、
マニュアル
https://www.postgresql.jp/docs/17/queries-with.html#QUERIES-WITH-MODIFYING
に書いてあるように、 INSERT INTO の前に書く
サンプル
WITH temp AS ( SELECT FIRST_NAME, LAST_NAME, PHONE_NUMBER FROM TEST_USERS WHERE AGE > 29 ) INSERT INTO CUSTOMERS ( FIRST_NAME, LAST_NAME, PHONE_NUMBER ) SELECT FIRST_NAME, LAST_NAME, PHONE_NUMBER FROM GUESTS a INNER JOIN temp b ON a.LAST_NAME = b.LAST_NAME
しかし、Oracle ではこれはエラーになってしまう。
WITH句はSELECTの前、
INSERT INTO と SELECT の間に書かないと Oracle では動かない。
INSERT INTO CUSTOMERS ( FIRST_NAME, LAST_NAME, PHONE_NUMBER ) WITH temp AS ( SELECT FIRST_NAME, LAST_NAME, PHONE_NUMBER FROM TEST_USERS WHERE AGE > 29 ) SELECT FIRST_NAME, LAST_NAME, PHONE_NUMBER FROM GUESTS a INNER JOIN temp b ON a.LAST_NAME = b.LAST_NAME




