Обновление нескольких столбцов таблицы в зависимости от условия - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу обновить несколько столбцов таблицы на основе определенных условий. Есть ли какое-либо решение сделать обновление в одном запросе

Я обновляю каждый столбец при разных условиях, что приводит к более высокой стоимости

- Custom0

  IF(xoldcustom0     = xnewcustom0) THEN
      UPDATE table_name
      SET custom0=xxoldcustom0copy
      WHERE id        =column_id
   END IF;

-Custom1

   IF(xoldcustom1     = xnewcustom1) THEN
      UPDATE table_name
      SET custom1=xxoldcustom1copy
      WHERE id        =column_id
   END IF;

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Поддерживает ли ваша СУБД предложение WITH (общие табличные выражения, см. https://www.essentialsql.com/introduction-common-table-expressions-ctes/)?

Тогда вы можете попробовать:

WITH temptab (id, custom0, custom1, ...)

AS

(ВЫБЕРИТЕ table_name.id, xxoldcustom0copy, table_name.custom1, .... FROM table_name

ГДЕ table_name.xoldcustom0 = xnewcustom0 и table_name.id = column_id

UNION

SELECT table_name.id, table_name.custim0, xxoldcustom1copy, .... FROM table_name

ГДЕ table_name.xoldcustom1 = xnewcustom1 и table_name.id = column_id

UNION

...

)

обновить имя таблицы SET custom0 = temptab.custom0 SET custom1 = temptab.custom1 ... WHERE id = temptab.id;

Похоже, MariaDB не поддерживает этот синтаксис, поэтому я не смог проверить это утверждение.

0 голосов
/ 06 ноября 2019

для каждого атрибута вы можете избавиться от оператора if:

ОБНОВЛЕНИЕ table_name SET custom1 = xxoldcustom1copy WHERE id = column_id и xoldcustom1 = xnewcustom1

Но я не вижу способа избежатьразличные утверждения для каждого из атрибутов / условий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...