我想根据值更新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是不正确的吗?我究竟做错了什么?
答案 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');