PostgreSQL.Вставьте valuse в соединительную таблицу - PullRequest
0 голосов
/ 24 мая 2019

Добрый день. У меня возникли проблемы с вставкой данных в соединительную таблицу.


Вот мои таблицы:

users table

    -----------------------
    |user_id   |FullName |
    -----------------------
    |1      | John    |
    |2      | Michael |
    |3      | Bryce   |

addresses table

    -----------------------------------------
    |address_id|    country    |    city     |
    -----------------------------------------
    |    1     |      USA      |    New-York |
    |    2     |     Russia    |    Moscow   |
    |    3     |    Germany    |    Berlin   |
    |    4     |      UK       |    London   |

This is the Junction table to connect the 
    two now.

"user_address"

    ------------------------
    | user_id | address_id |
    ------------------------
    |   1     |      1     |
    |   1     |      2     |
    |   2     |      3     |
    |   3     |      1     |

Я хочу подключить их, затем создаю адрес. Итак, мне нужно создать новый адрес в address table, а затем поместить идентификатор созданного адреса в соединение (не волнует user_id, мне просто нужно обработать address_id).

Вот запрос, который я использовал для создания адреса:

"INSERT INTO addresses (country, city) VALUES (?, ?) RETURNING id, country, city"

Как видите, мне нужно вернуть значения созданного адреса, чтобы показать их моему потребителю.

Как я могу вставить новый адрес, получить его ID и поместить его в мое соединение? Желательно в одном запросе.

1 Ответ

2 голосов
/ 24 мая 2019

A with вставка предложения поможет.

with ins AS
(
 INSERT INTO addresses (country, city) 
     VALUES ('USA', 'New-York') RETURNING address_id, country, city
),
ins2 AS
(
 INSERT INTO user_address (address_id) select address_id from ins
)
select * from ins

Примечание:

Вы сказали, что

.. не волнует user_id, япросто нужно обработать address_id

Итак, я предполагаю, что у вас есть другой механизм для обновления user_ids

DEMO

...