запрос на обновление с соединением на двух таблицах

Я имею customer и address таблицы.

Запрос:

SELECT *
FROM addresses a,
     customers b
WHERE a.id = b.id

возвраты 474 записи

Для этих записей я хотел бы добавить id из customer таблица в cid из address таблица.

Пример: Если для первой записи идентификатору клиента 9 лет и id из адреса также 9 затем, я хотел бы вставить 9 в cid столбец таблицы адресов.

Я попробовал:

UPDATE addresses a,
       customers b
SET a.cid = b.id
WHERE a.id = b.id

но это, кажется, не работает.

35
задан Pablo A 31 August 2017 в 05:25
поделиться

3 ответа

это формат Postgres UPDATE JOIN:

UPDATE address 
SET cid = customers.id
FROM customers 
WHERE customers.id = address.id

Вот другие варианты: http://mssql-to-postgresql.blogspot.com/2007/12/updates-in-postgresql-ms-sql-mysql .html

66
ответ дан 27 November 2019 в 06:56
поделиться

Официально языки SQL не поддерживают предложение JOIN или FROM в операторе UPDATE, если оно не входит в подзапрос. Таким образом, подход Hoyle ANSI будет чем-то вроде

Update addresses
Set cid = (
            Select c.id
            From customers As c
            where c.id = a.id
            )
Where Exists    (
                Select 1
                From customers As C1
                Where C1.id = addresses.id
                )

. Однако многие СУБД, такие как Postgres, поддерживают использование предложения FROM в операторе UPDATE. Во многих случаях вам необходимо включить таблицу обновлений и присвоить ей псевдоним в предложении FROM, однако я не уверен насчет Postgres:

Update addresses
Set cid = c.id
From addresses As a
    Join customers As c
        On c.id = a.id
3
ответ дан 27 November 2019 в 06:56
поделиться
update addresses set cid=id where id in (select id from customers)
0
ответ дан 27 November 2019 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: