sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL multi INSERT...RETURNINGと複数の列

    データ変更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タイプのクエリは、ネストできる唯一のタイプですか?


    1. STUFF()を使用してSQLServerの別の文字列に文字列を挿入する方法

    2. SQL Server(T-SQL)でデータベースメールプロファイルを削除する

    3. SQLServer-更新時の内部結合

    4. 2Dアレイから1Dアレイを選択するにはどうすればよいですか?