sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL multi INSERT...RETURNING met meerdere kolommen

Gebruik gegevensmodificerende CTE's om uw drie INSERT's aan elkaar te koppelen. Zoiets als dit:

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;
  • Het is meestal het beste om een ​​kolomdefinitielijst toe te voegen voor INSERT s (behalve in speciale gevallen). Anders, als de tabelstructuur verandert, kan je code op verrassende manieren breken.

  • Ik heb kolommen weggelaten waar je gewoon DEFAULT . zou invoeren . Standaardwaarden worden automatisch ingevoegd. Korter, zelfde resultaat.

  • De laatste, optionele RETURNING geeft de resulterende user_id . terug - uiteraard van een reeks of een andere standaard. Het is eigenlijk de user_id van table3 , maar dat is hetzelfde, tenzij je een aantal triggers of andere magische interferentie hebt.

Meer over het wijzigen van gegevens (ook bekend als "beschrijfbaar") CTE's:

  • Zijn zoekopdrachten van het SELECT-type het enige type dat kan worden genest?


  1. 3 manieren om de taal van de huidige sessie in SQL Server (T-SQL) te krijgen

  2. Benieuwd naar de nieuwste Microsoft Access-functies?

  3. Gegevensclassificatie in IRI Workbench

  4. 2 manieren om de karaktersets beschikbaar te krijgen in MariaDB