根据单元格值更新MySQL中的列

时间:2019-06-18 20:56:39

标签: mysql sql

我想根据值更新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 and LinkedAccountId ='30'在第1行附近使用正确的语法

在这些语句之间使用AND是不正确的吗?我究竟做错了什么?

3 个答案:

答案 0 :(得分:2)

您可以使用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 :(得分:2)

是的,该说法不正确(MySQL Reference Manual

我假设您要将相同值放入不同行的Engagement列:

尝试一下:

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

如果要将不同值放入几行的Engagement列中,则需要发出多个独立的语句。

答案 2 :(得分:1)

使用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');