データ変更CTEを使用する 3つのINSERTをチェーンします。このようなもの:
WITH ins1 AS (
INSERT INTO table1 (username, name, surname)
VALUES ('johnee','john','smith')
RETURNING user_id
)
, ins2 AS (
INSERT INTO table2 (user_id, password)
SELECT ins1.user_id, 'secret'
FROM ins1 -- nothing to return here
)
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM ins1
RETURNING user_id;
-
通常、列定義リストを追加するのが最適です。
INSERT
の場合 s(特別な場合を除く)。そうしないと、テーブル構造が変更された場合、コードが驚くべき方法で破損する可能性があります。 -
DEFAULT
と入力するだけの列を省略しました 。デフォルトは自動的に挿入されます。より短く、同じ結果。 -
最後のオプションの
RETURNING
結果のuser_id
を返します -明らかにシーケンスまたはその他のデフォルトから。実際にはuser_id
table3
から 、ただし、トリガーやその他の魔法の干渉がない限り、同じです。
データ変更(別名「書き込み可能」)CTEの詳細:
- SELECTタイプのクエリは、ネストできる唯一のタイプですか?