Обновите столбцы в MySQL в зависимости от значения ячейки - PullRequest
0 голосов
/ 18 июня 2019

Я хочу обновить несколько ячеек в таблице MySQL в зависимости от значения.

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

UPDATE billing_info_test 
SET Engagement='800000039768' 
WHERE Engagement IS NULL and LinkedAccountId = '12345678910'

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

UPDATE billing_info_test 
SET Engagement='800000039768' 
WHERE Engagement IS NULL and LinkedAccountId = '12345678910' 
AND SET Engagement='800000039768' 
WHERE Engagement IS NULL and LinkedAccountId = '3542123267612';

ОШИБКА 1064 (42000): в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'SET Engagement =' 800000039768 'WHERE Engagement IS NULL и LinkedAccountId =' 30 'в строке 1

Это неверно дляиспользовать И между этими утверждениями?Что я делаю неправильно?

Ответы [ 3 ]

2 голосов
/ 19 июня 2019

Да, это утверждение неверно ( Справочное руководство по MySQL )

Я предполагаю, что вы хотите поместить такое же значение в столбец Engagement разные строки:

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

UPDATE billing_info_test 
  SET Engagement='800000039768' 
  WHERE Engagement IS NULL AND (
    LinkedAccountId = '12345678910' 
    OR LinkedAccountId = '3542123267612'
  );

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

2 голосов
/ 19 июня 2019

Вы можете сделать это с помощью оператора CASE:

UPDATE billing_info_test 
SET 
  Engagement = CASE 
    WHEN LinkedAccountId = '12345678910' THEN 'something'
    WHEN LinkedAccountId = '3542123267612' THEN 'somethingelse'
    WHEN LinkedAccountId IN ('354', '123', '000') THEN 'somethingelsetoo'
    ELSE 'default'
  END
WHERE Engagement IS NULL
1 голос
/ 19 июня 2019

Используйте выражение CASE, чтобы назначенное значение зависело от другого столбца.

UPDATE billing_info_test 
SET Engagement= 
    CASE LinkedAccountId
        WHEN '12345678910' THEN '800000039768'
        WHEN '3542123267612' THEN '800000039768'
    END
WHERE Engagement IS NULL AND LinkedAccountId IN ('12345678910', '3542123267612');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...