2016-07-12 5 views
0

У меня есть SQL-запрос, который может возвратиться с 0 до 20 результатов. Вот, например:Запустить запрос UPDATE для каждой строки в другом SELECT

SELECT value_id FROM table1 t1 
INNER JOIN table2 t2 ON .... 
INNER JOIN table3 t3 ON .... 
WHERE .... 

Затем я хочу запустить для каждого value_id UPDATE запроса. Предположим:

UPDATE table4 

SET new_value = 1 

WHERE value_id IN (SELECT value_id FROM table1 t1 
INNER JOIN table2 t2 ON .... 
INNER JOIN table3 t3 ON .... 
WHERE ....) 

Может ли этот подзапрос работать над этим? Является ли производительность эффективной или есть другой способ?

+0

Hi @utility. Это MSSQL – Tasos

+0

Обновление с использованием соединений лучше, чем подзапрос –

+0

Да, есть другой способ. Вы можете использовать join (Update From) или использовать таблицу шаблонов. – NEER

ответ

1

Ваш запрос в порядке. Производительность зависит от структуры вашей базы данных. Например, если SELECT работает быстро, то UPDATE должен быть довольно быстрым (не таким быстрым: для UPDATE больше накладных расходов).

Итак, ответ на ваш вопрос: Да, подзапрос может работать следующим образом. Проверьте версию SELECTtable4), чтобы получить представление о влиянии на производительность.

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