sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres infoga värde från infoga i annan tabell

Du behöver ett vanligt tabelluttryck för denna typ av infogningskedja:

with ta as (
  INSERT INTO tbl_b (status) VALUES ('OK') 
  RETURNING id
)
INSERT INTO tbl_a (name, tbl_b_reference) 
VALUES ('myName', (select id from ta));

Ett annat alternativ är att helt enkelt använda lastval() funktion för att referera till det senast genererade sekvensvärdet:

INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference) 
  VALUES ('myName', lastval());

Observera att du inte får ha några andra satser som genererar sekvensvärden mellan dessa två.

Eller använd funktionen currval():

INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference) 
  VALUES ('myName', currval('tbl_b_id_seq'));

'tbl_b_id_seq' är standardnamnet Postgres använder för en sekvens som skapas för en serial kolumn:



  1. Base58 Encoder funktion i PostgreSQL

  2. Diff. mellan datum - SQL plus

  3. orakel - vilka uttalanden måste göras?

  4. java.sql.SQLException:Fältet 'supplier_id' har inget standardvärde