sql >> Base de Datos >  >> RDS >> PostgreSQL

Insertar datos en tablas vinculadas por clave externa

Puede hacerlo en una declaración SQL para clientes existentes, 3 declaraciones para los nuevos. Todo lo que tienes que hacer es ser optimista y actuar como si el cliente ya existiera:

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

Si el cliente no existe, obtendrá una excepción sql cuyo texto será algo como:

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

(siempre que haya hecho que customer_id no sea anulable, lo cual estoy seguro de que hizo). Cuando ocurra esa excepción, inserte el cliente en la tabla de clientes y vuelva a hacer la inserción en la tabla de pedidos:

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

A menos que su negocio esté creciendo a un ritmo que haga que "dónde poner todo el dinero" sea su único problema real, la mayoría de sus inserciones serán para clientes existentes. Por lo tanto, la mayoría de las veces, la excepción no ocurrirá y terminará en una declaración.