Voglio inserire i dati in 3 tabelle con una singola query.
mie tabelle si presenta come di seguito:Inserire i dati in 3 tabelle alla volta utilizzando Postgres
CREATE TABLE sample (
id bigserial PRIMARY KEY,
lastname varchar(20),
firstname varchar(20)
);
CREATE TABLE sample1(
user_id bigserial PRIMARY KEY,
sample_id bigint REFERENCES sample,
adddetails varchar(20)
);
CREATE TABLE sample2(
id bigserial PRIMARY KEY,
user_id bigint REFERENCES sample1,
value varchar(10)
);
mi metterò una chiave in cambio di ogni inserimento e ho bisogno di inserire la chiave nella tabella successiva.
La mia domanda è:
insert into sample(firstname,lastname) values('fai55','shaggk') RETURNING id;
insert into sample1(sample_id, adddetails) values($id,'ss') RETURNING user_id;
insert into sample2(user_id, value) values($id,'ss') RETURNING id;
Ma se corro query singole hanno solo valori restituiti a me e io non li può riutilizzare nella prossima interrogazione immediatamente.
Come raggiungere questo obiettivo?
grazie per la riproduzione È possibile aggiungere rotolo di transazione se qualsiasi falliscono inserimento avviene .yes come posso – Faisal
Si tratta di una singola istruzione SQL. È possibile raggruppare più istruzioni in un'unica transazione, ma non è possibile dividerla. Inoltre, cosa dice Denis nel suo commento. E ho aggiunto alcuni link alla mia risposta. –
ma puoi avere un SELECT all'interno del CTE, e subito dopo usarlo con un INSERT? – mmcrae