когда тогда состояние по умолчанию в SQL - PullRequest
0 голосов
/ 12 мая 2019

Мне нужно обновить один столбец относительно другого. проблема в том, что мне не нужно обновлять все значения, а только некоторые.

например: Допустим, у меня есть таблица с именем "test" и cols: набор данных и созданный Att.

Я хочу обновить набор данных до 1, если CreatedAT равен '2011-06-01', и до 2, если CreatedAt равен '2011-08-08' Я не хочу вносить изменения в другие дела.

Я попробовал этот код:

update test 
set dataset = (CASE 
 WHEN   DATE(createdAt) = '2011-06-01' 
                        THEN 1
                      WHEN   DATE(createdAt) = '2011-08-08' 
                        THEN 2
                    END);

Пролог состоит в том, что во всех остальных случаях дата не была одной из них, набор данных получает значение NULL вместо хранения своих данных.

Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 12 мая 2019

Есть два способа:

Одним из них является использование предложения WHERE, чтобы вы обрабатывали только те строки, которые необходимо изменить:

UPDATE test
SET dataset = CASE DATE(createdAt)
        WHEN '2011-06-01' THEN 1
        WHEN '2011-08-08' THEN 2
    END
WHERE DATE(createdAt) IN ('2011-06-01', '2011-08-08');

Другой способ - присвоить старое значение в случае ELSE.

UPDATE test
SET dataset = CASE DATE(createdAt)
        WHEN '2011-06-01' THEN 1
        WHEN '2011-08-08' THEN 2
        ELSE dataset
    END;
0 голосов
/ 12 мая 2019

Попробуйте это-

UPDATE test 
SET dataset =
    CASE 
        WHEN DATE(createdAt) = '2011-06-01' THEN 1
        WHEN DATE(createdAt) = '2011-08-08' THEN 2
        ELSE dataset 
     END
0 голосов
/ 12 мая 2019

Вам нужно утверждение WHERE:

update test 
set dataset = CASE 
  WHEN DATE(createdAt) = '2011-06-01' THEN 1
  WHEN DATE(createdAt) = '2011-08-08' THEN 2
END
WHERE DATE(createdAt) IN ('2011-06-01', '2011-08-08')

Таким образом, все строки, которые не нужно обновлять, не будут затронуты.
Также нет необходимости в ELSE... части в операторе CASE, так как это может привести к бесполезным обновлениям и, возможно, нежелательным побочным эффектам и вызвать проблемы с производительностью.

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