PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Inserisci dati in tabelle collegate da chiave esterna

Puoi farlo in una dichiarazione sql per i clienti esistenti, 3 dichiarazioni per quelli nuovi. Tutto quello che devi fare è essere ottimista e comportarti come se il cliente esistesse già:

insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

Se il cliente non esiste, otterrai un'eccezione sql il cui testo sarà qualcosa del tipo:

null value in column "customer_id" violates not-null constraint

(a condizione che tu abbia reso customer_id non annullabile, cosa che sono sicuro che tu l'abbia fatto). Quando si verifica tale eccezione, inserisci il cliente nella tabella dei clienti e ripeti l'inserimento nella tabella degli ordini:

insert into customer(name) values ('John');
insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

A meno che la tua attività non cresca a un ritmo tale da rendere "dove mettere tutti i soldi" il tuo unico vero problema, la maggior parte dei tuoi inserti sarà per i clienti esistenti. Quindi, la maggior parte delle volte, l'eccezione non si verificherà e avrai finito in un'unica dichiarazione.