UPDATE ae44
SET price =
CASE
WHEN ID = 'AT259793380' THEN
'500'
WHEN ID = 'AT271729590' THEN
'600'
WHEN ID = 'AT275981020' THEN
'700'
END
请注意,此查询将使用其他ID将价格更新为NULL。 如果您只想更新列表中的id,请使用以下命令:
UPDATE ae44
JOIN (
SELECT 'AT259793380' AS oldval, '500' AS newval
UNION ALL
SELECT 'AT271729590' AS oldval, '600' AS newval
UNION ALL
SELECT 'AT275981020' AS oldval, '700' AS newval
) q
ON ae44.id = q.oldval
SET price = q.newval
UPDATE ae44 SET
Price = CASE
WHEN ID = 'AT259793380' THEN '500'
WHEN ID = 'AT271729590' THEN '600'
WHEN ID = 'AT275981020' THEN '700'
ELSE Price END
或者你可以使用WHERE:
UPDATE ae44 SET
Price = CASE
WHEN ID = 'AT259793380' THEN '500'
WHEN ID = 'AT271729590' THEN '600'
WHEN ID = 'AT275981020' THEN '700'
END
WHERE
ID IN ('AT259793380', 'AT271729590', 'AT275981020')
设置限制也是一个好主意:
UPDATE ae44 SET
Price = CASE
WHEN ID = 'AT259793380' THEN '500'
WHEN ID = 'AT271729590' THEN '600'
WHEN ID = 'AT275981020' THEN '700'
END
WHERE
ID IN ('AT259793380', 'AT271729590', 'AT275981020')
LIMIT 3
UPDATE `table`
SET Price = ELT(field(ID,'AT259793380','AT271729590','AT275981020'), '500', '600', '700')
WHERE ID IN ('AT259793380','AT271729590','AT275981020')
UPDATE ae44
SET price =
CASE
WHEN ID = 'AT259793380' THEN '500'
WHEN ID = 'AT271729590' THEN '600'
WHEN ID = 'AT275981020' THEN '700'
WHEN ID THEN price
END
检查mysql错误会发现: SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在'= ' AT 275981020 ' then '700' end case'附近使用的正确语法 我不知道您是否认为可以将case作为别名,或者该别名可以用于什么。也许这只是您在SELECT查询中发现的另一个CASE块的错误copy-pasta。 最终,问题出在后面的case上。一旦删除了最后一个单词,查询就会执行,但还有更多的内容需要解释。 在我自己的项目中,我将使用CASE语法的更简洁的变体,其中ID只编写一次,而不是在每种情况下都编写大多数冗余的表达式。 我还建议使用小写的列名,这样SQL就更容易被人阅读。
UPDATE ae44 SET
Price = CASE ID
WHEN 'AT259793380' THEN '500'
WHEN 'AT271729590' THEN '600'
WHEN 'AT275981020' THEN '700'
END
WHERE
ID IN ('AT259793380','AT271729590','AT275981020')
7条答案
按热度按时间slmsl1lt1#
请注意,此查询将使用其他ID将价格更新为
NULL
。如果您只想更新列表中的id,请使用以下命令:
3b6akqbq2#
或者你可以使用WHERE:
设置限制也是一个好主意:
mccptt673#
删除第二个“case”,它将工作:
beq87vna4#
你可以尝试一个简单的查询,如:
qyzbxkaa5#
我假设这是一个mysql查询。您可以使用Quassnoi发布的第一个查询,然后添加
作为最后的“当”。这将防止您的所有价格字段被设置为空
wlzqhblo6#
检查mysql错误会发现:
SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在'= ' AT 275981020 ' then '700' end case'附近使用的正确语法
我不知道您是否认为可以将
case
作为别名,或者该别名可以用于什么。也许这只是您在SELECT
查询中发现的另一个CASE
块的错误copy-pasta。最终,问题出在后面的
case
上。一旦删除了最后一个单词,查询就会执行,但还有更多的内容需要解释。在我自己的项目中,我将使用
CASE
语法的更简洁的变体,其中ID
只编写一次,而不是在每种情况下都编写大多数冗余的表达式。我还建议使用小写的列名,这样SQL就更容易被人阅读。
添加
WHERE
原因后,只有3行将被列入白名单以供可能的修改-因此,ELSE
可以安全地从CASE
块中省略。aelbi1ox7#