sql >> Databáze >  >> RDS >> PostgreSQL

Postgres vloží hodnotu z vložení do jiné tabulky

Pro tento druh řetězení vložení potřebujete společný tabulkový výraz:

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));

Další možností je jednoduše použít lastval() funkce odkazující na poslední vygenerovanou sekvenční hodnotu:

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

Všimněte si, že nesmíte mít žádné další příkazy, které generují sekvenční hodnoty mezi těmito dvěma.

Nebo použijte funkci 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' je standardní název, který Postgres používá pro sekvenci, která je vytvořena pro serial sloupec:



  1. jak získat data jednoho sloupce z jedné tabulky do jiné tabulky jako různé sloupce v PL/SQL

  2. REGEXP s CHOP Mysql

  3. Problém s řazením Postgres

  4. Vytvořit tabulku v MySQL, která odpovídá jiné tabulce?