обновить одну таблицу данными из другой - PullRequest
44 голосов
/ 18 февраля 2011

Таблица 1:

id    name    desc
-----------------------
1     a       abc
2     b       def
3     c       adf

Таблица 2:

id    name    desc
-----------------------
1     x       123
2     y       345

Как запустить запрос sql update , который может обновить таблицу 1 с именем таблицы 2и desc используя один и тот же идентификатор?Таким образом, конечный результат, который я получу, будет

Таблица 1:

id    name    desc
-----------------------
1     x       123
2     y       345
3     c       adf

Как это можно сделать для:

  • SQL Server
  • MySQL
  • PostgreSQL
  • Oracle

Ответы [ 5 ]

74 голосов
/ 18 февраля 2011

Для MySql:

UPDATE table1 JOIN table2 
    ON table1.id = table2.id
SET table1.name = table2.name,
    table1.`desc` = table2.`desc`

Для Sql Server:

UPDATE   table1
SET table1.name = table2.name,
    table1.[desc] = table2.[desc]
FROM table1 JOIN table2 
   ON table1.id = table2.id
21 голосов
/ 13 ноября 2012

Oracle 11g R2:

create table table1 (
  id number,
  name varchar2(10),
  desc_ varchar2(10)
);

create table table2 (
  id number,
  name varchar2(10),
  desc_ varchar2(10)
);

insert into table1 values(1, 'a', 'abc');
insert into table1 values(2, 'b', 'def');
insert into table1 values(3, 'c', 'ghi');

insert into table2 values(1, 'x', '123');
insert into table2 values(2, 'y', '456');

merge into table1 t1
using (select * from table2) t2
on (t1.id = t2.id)
when matched then update set t1.name = t2.name, t1.desc_ = t2.desc_;

select * from table1;

        ID NAME       DESC_
---------- ---------- ----------
         1 x          123
         2 y          456
         3 c          ghi

См. Также Oracle - оператор обновления с внутренним объединением .

8 голосов
/ 13 января 2016
UPDATE table1
SET 
`ID` = (SELECT table2.id FROM table2 WHERE table1.`name`=table2.`name`)
7 голосов
/ 16 июля 2013

Попробуйте следующий код.Это работает для меня ....

UPDATE TableOne 
SET 
field1 =(SELECT TableTwo.field1 FROM TableTwo WHERE TableOne.id=TableTwo.id),
field2 =(SELECT TableTwo.field2 FROM TableTwo WHERE TableOne.id=TableTwo.id)
WHERE TableOne.id = (SELECT  TableTwo.id 
                             FROM   TableTwo 
                             WHERE  TableOne.id = TableTwo.id) 
1 голос
/ 12 ноября 2017

Используйте следующий блок запроса для обновления таблицы 1 таблицей 2 на основе идентификатора:

UPDATE Table1, Table2 
SET Table1.DataColumn= Table2.DataColumn
where Table1.ID= Table2.ID;

Это самый простой и быстрый способ решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...