Re: INSERT / UPDATE into 2 inner joined table simultaneously

Поиск
Список
Период
Сортировка
От Steve Midgley
Тема Re: INSERT / UPDATE into 2 inner joined table simultaneously
Дата
Msg-id CAJexoS+gmgBUL+MU68SYsDsHLY0AaaW9tYOupfTQfsdWatxtgA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: INSERT / UPDATE into 2 inner joined table simultaneously  (Lou <lou@dayspringpublisher.com>)
Список pgsql-sql


On Wed, Mar 6, 2019 at 1:36 PM Lou <lou@dayspringpublisher.com> wrote:
Hi Chris,

Thank you for answering so quickly.

On 3/6/19 2:11 PM, Christopher Swingley wrote:
Lou,

On Wed, Mar 6, 2019 at 10:59 AM Lou <lou@dayspringpublisher.com> wrote:
How can I INSERT new rows into both tables simultaneously with automatically created id numbers, and how can I UPDATE both tables simultaneously?
Although I have no idea why you would want to do this, you can insert
data into two tables with one query using a common table expression:

WITH cinsert AS (   INSERT INTO c (id, name) VALUES (1, 'Jones')   RETURNING id, name)
INSERT INTO p (id, name) (SELECT * FROM cinsert);

Cheers,

Chris

Sorry, I did not clearly explain what I'm trying to do. The two tables contain different data. The c table contains company data, and the p table contains personal data about my contact person in that company. The only data the two tables share is the contents of c.id which must be inserted into the p.c_id field (so that the two tables can later be inner joined by SELECT). I've programmed a data entry screen which shows the fields of both tables together, so that the data for both tables can be inserted or edited in one sitting. The data for both tables needs to be saved at the same time so that the id number of table c can be copied into the c_id field of table p.

Lou


Lou, I think what you want is to insert into both tables in a single "atomic" transaction. Basically you just issue to insert statements, sandwiched between a begin / commit transaction block. If you are unhappy with the way your inserts are working, you can rollback the transaction instead of committing. Everyone who is trying to read the database will experience the data in the two tables as either "both changed" or "neither changed."

So to copy the data - you can insert into the c table, and then reuse the c_id in the table p, to maintain relational integrity.

Apologies if I've misunderstood your question, and given you too basic an answer.

Steve



В списке pgsql-sql по дате отправления:

Предыдущее
От: Christopher Swingley
Дата:
Сообщение: Re: INSERT / UPDATE into 2 inner joined table simultaneously
Следующее
От: Tony Shelver
Дата:
Сообщение: Re: INSERT / UPDATE into 2 inner joined table simultaneously