2012-06-28 2 views
13

У меня есть эти таблицы и значение:Обновление несколько строк с помощью оператора выбора

Table1 
------------------------ 
ID | Value 
------------------------ 
2 | asdf 
4 | fdsa 
5 | aaaa 


Table2 
------------------------ 
ID | Value 
------------------------ 
2 | bbbb 
4 | bbbb 
5 | bbbb 

Я хочу, чтобы обновить все значения в Table2, используя значения в Table1 с их соответствующими идентификаторами.

Есть ли способ сделать это с помощью простого SQL-запроса?

+4

Возможный дубликат [SQL Server UPDATE from SELECT] (http://stackoverflow.com/questions/2334712/sql-server -update-from-select) – RedFilter

ответ

33

Выполнить выберите, чтобы убедиться, что это то, что вы хотите

SELECT t1.value AS NEWVALUEFROMTABLE1,t2.value AS OLDVALUETABLE2,* 
FROM Table2 t2 
INNER JOIN Table1 t1 on t1.ID = t2.ID 

Update

UPDATE Table2 
SET Value = t1.Value 
FROM Table2 t2 
INNER JOIN Table1 t1 on t1.ID = t2.ID 

Кроме того, рекомендуется использовать BEGIN TRAN, так что вы можете свернуть его обратно, если это необходимо, но убедитесь, что вы COMMIT его когда вы удовлетворены.

6

Если у вас есть идентификаторы в обеих таблицах, следующие работы:

update table2 
    set value = (select value from table1 where table1.id = table2.id) 

Возможно, лучшим подходом является объединение:

update table2 
    set value = table1.value 
    from table1 
    where table1.id = table2.id 

Обратите внимание, что этот синтаксис работает в SQL Server, но может отличаться в других базах данных.

1

Вы можете использовать псевдоним, чтобы улучшить запрос:

UPDATE t1 
    SET t1.Value = t2.Value 
    FROM table1 AS t1 
     INNER JOIN 
     table2 AS t2 
     ON t1.ID = t2.ID 
0

Я использовал этот на MySQL, MS Access и SQL Server. Поля id - это поля, по которым таблицы совпадают, а не обязательно первичный индекс.

UPDATE DestTable INNER JOIN SourceTable ON DestTable.idField = SourceTable.idField SET DestTable.Field1 = SourceTable.Field1, DestTable.Field2 = SourceTable.Field2... 
0
SET SQL_SAFE_UPDATES = 0; 
UPDATE m1,m2 
SET m1.code = m2.code 
WHERE 
    m1.name = (select distinct m2.name from m2 limit 1); 

Здесь Updation принимает Palce в m1.code, где Condtion находится в поиске все записи в подразделе запроса и возвращает все совпадающие rows.I использовать предел 1, чтобы вернуть один вместо дублей. Вы можете использовать разные или ограничить 1 или верхнюю 1 или иметь счет Sry, для моего английского

+1

Пожалуйста, добавьте описание для кода. @ HariKishore –

+1

Благодарим вас за этот фрагмент кода, который может оказать немедленную помощь. Правильное объяснение [значительно улучшило бы] (// meta.stackexchange.com/q/114762) его образовательное значение, показав * почему * это хорошее решение проблемы и сделало бы его более полезным для будущих читателей с похожими, но не идентичные вопросы. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –

Смежные вопросы