Я имею 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
но это, кажется, не работает.
это формат 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
Официально языки 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
update addresses set cid=id where id in (select id from customers)