Ответ 1
это формат 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
У меня есть таблицы customer
и address
.
Query:
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 a
set cid = b.id
from customers b
where a.id = b.id
update addresses set cid=id where id in (select id from customers)
Попробуйте этот
UPDATE employee
set EMPLOYEE.MAIDEN_NAME =
(SELECT ADD1
FROM EMPS
WHERE EMP_CODE=EMPLOYEE.EMP_CODE);
WHERE EMPLOYEE.EMP_CODE >='00'
AND EMPLOYEE.EMP_CODE <='ZZ';