2015-01-28 12 views
0

Допустим, у меня есть эти таблицы и значения:Обновление нескольких строк с использованием операторов выбора

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

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

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

Я знаю, что могу управлять этим:

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

Но что я могу сделать, если Table1 и Table2 фактически выберите заявления с критериями? Как я могу изменить формулировку SQL, чтобы принять это во внимание?

+0

Коррелят ваши выборки с помощью 'Table2', используя объединения, а затем запускайте обновление на' Table2' – SoulTrain

ответ

0

Вот как такие запросы обновления обычно выполняются в Oracle. Oracle не имеет UPDATE FROM вариант:

UPDATE table2 t2 
    SET t2.value = (SELECT t1.value FROM table1 t1 
        WHERE t1.ID = t2.ID) 
WHERE EXISTS (SELECT 1 FROM table1 t1 
       WHERE t1.ID = t2.ID); 

Предложение WHERE EXISTS удостоверится, что только строки с соответствующей строки в table1 обновляются (в противном случае каждая строка в table2 будет обновляться, а те, без соответствующих строк в table1 будет обновлен до NULL).

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