что лучше (если) или (где) в sql? - PullRequest
0 голосов
/ 09 января 2020

В хранимой процедуре я хочу обновить большой набор данных на основе некоторых условий, так что лучше:

Сценарий 1 (если выбрать несколько, если)

Select All Data records then 
<b>LOOP</b>

<b>IF</b> (Condition1 == true)
  execute update statement
<b>IF</b> (Condition2 == true)
  execute update statements
<b>END LOOP</b>

Сценарий 2 (множественный выбор, где)

Select Data <b>where</b> (condition 1) <b>loop</b>
   execute update statements
<b>end loop</b>

Select Data <b>where</b> (condition 2) loop
  execute update statements
<b>end loop</b>

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Я не думаю, что есть ответ, действительный во всех сценариях ios (продукты базы данных, запрос выбора, размер ввода и т. Д. c), но имейте в виду:

1) На основе вашего решения Если IF будет иметь только ОДИН выбор и один L OOP, поэтому, если система теряет больше времени на выбор записей (это очень сложный запрос), возможно, лучше выбрать один l oop.

2). решение основано на ГДЕ, а не как ОДНОМ запросе для каждого условия, поэтому я бы избегал его для более чем 2 или 3 условий, если это не очень очень быстрый запрос (например, выбор записи из таблицы конфигурации с 100 записями или около того).

3) Кроме того, имейте в виду, что вы можете поместить IF непосредственно в оператор UPDATE.

В общем, я бы go для решений IF (1) или (3).

С уважением

1 голос
/ 09 января 2020

Другой метод - использовать оператор MERGE , тогда вам не нужно использовать циклы или отдельные операторы SELECT и UPDATE:

MERGE INTO destination dst
USING (
  SELECT *
  FROM   source
  WHERE  condition = True
) src
ON ( dst.id = src.id )
WHEN MATCHED THEN
  UPDATE SET column = src.column;
...