Обновить столбец SQL на основе содержит поиск из списка значений

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть список разновидностей, каждая разновидность имеет подобные коды

 CLADIR(E611, E613, E614, E615, F120, F121, F122, F123, F188, F1D9, F1DA, F108)
VITIN(E620, F10A, F10E, F16B, F16C, F16D, F16E, F17D)
SOLO(E612, E617, E618, E619, F124, F125, F126, F127, F128, F1DB, F1DC)
JIMNA(E61E, F180)
  

У меня есть данные в существующей базе данных с разными именами и кодами разнообразия (некоторые коды равны одному из этих кодов из этих вариантов, а некоторые нет). Я работаю над обновлением названия разновидности на основе соответствия его кода любому из этих кодов. Если код не является частью какого-либо из этих кодов, то я хочу удалить эту строку.

Пример данных:

 Variety   Code
SNANA     F108
FLATO     E612
JAITI     X111
  

для вышеуказанных данных

  1. SNANA будет обновлен как CLADIR, поскольку код F108 является одним из кодов CLADIR из списка
  2. FLATO будет обновляться как СОЛО, так как код E612 является одним из кодов СОЛО из списка
  3. JAITI с кодом X111 строка должна быть удалена, поскольку X111 не соответствует ни одному из приведенных выше кодов разновидностей Возможно ли это сделать в обычном sql? кто-нибудь может мне помочь

Ответ №1:

Вы ищете case выражения?

 update t
    set variety = (case when code in ('E611', . . . ) then 'Cladir'
                        when code in ('E620', . . . ) then 'Vitin'
                        . . .
                   end);

-- The above sets the variety for non-matching codes to `NULL`, so delete those

delete from t
    where variety is null;
  

Комментарии:

1. Я думаю, что это работает. Мне нужно выполнить этот запрос только для нескольких значений, поэтому я включу подсказку where с where variety in ('SNANA','FLATO','JAITI')