Я использую PostgreSQL.Вставить данные в таблицы, связанные с помощью внешнего ключа
Customer
==================
Customer_ID | Name
Order
==============================
Order_ID | Customer_ID | Price
Чтобы вставить заказ, вот что мне нужно сделать, как правило,
Например, «Джон» место «1,34» по цене порядка.
(1) Get Customer_ID from Customer table, where name is "John"
(2) If there are no Customer_ID returned (There is no John), insert "John"
(3) Get Customer_ID from Customer table, where name is "John"
(4) Insert "Customer_ID" and "1.34" into Order table.
Существует 4 SQL-связи с базой данных для этой простой операции !!!
Есть ли лучший способ, который может быть достигнут с помощью 1 инструкции SQL?
Можете ли вы изменить свой ответ на использование «ВОЗВРАЩЕНИЯ», как предложил depesz? Так что нам не нужно выполнять дополнительный запрос [select customer_id от клиента, где name = 'John'] –
Это не оптимизация, которую я бы сделал. Вот почему: во-первых, простое сохранение кода: если вторая вставка в порядке идентична первой, вы можете использовать тот же код для обеих вставок. Во-вторых: вряд ли будет реальная прибыль. Поскольку вы только что сделали запрос на клиента, а затем вставить, Postgres будет иметь строку и соответствующий индекс в кеше, поэтому выбор от клиента будет молниеносно. –