обновить запрос с объединением двух таблиц - PullRequest
35 голосов
/ 12 мая 2010

У меня есть 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

но это, похоже, не работает.

Ответы [ 5 ]

66 голосов
/ 12 мая 2010

это ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ Postgres:

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

5 голосов
/ 02 февраля 2015

Использование псевдонимов таблицы в условии соединения:

update addresses a
set cid = b.id 
from customers b 
where a.id = b.id
3 голосов
/ 12 мая 2010

Официально языки 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
0 голосов
/ 14 марта 2014

Попробуйте это

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';
0 голосов
/ 12 мая 2010
update addresses set cid=id where id in (select id from customers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...