有人能告诉我如何修复此查询吗?
update ae44
set Price = Case
when ID = 'AT259793380' then '500'
when ID = 'AT271729590' then '600'
when ID = 'AT275981020' then '700'
end case
我只想通过匹配ID来批量更新基于ID的上市价格。
答案 0 :(得分:34)
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
答案 1 :(得分:26)
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')
并设置LIMIT也是个好主意:
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
答案 2 :(得分:4)
删除第二个“案例”,它将起作用:
UPDATE ae44
SET Price = (CASE
WHEN ID = 'AT259793380' THEN '500'
WHEN ID = 'AT271729590' THEN '600'
WHEN ID = 'AT275981020' THEN '700'
END)
答案 3 :(得分:2)
我假设这是一个mysql查询。您可以使用Quassnoi发布的第一个查询,只需添加
WHEN ID THEN price
作为最后的“WHEN”。这样可以防止将所有价格字段设置为空
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
答案 4 :(得分:0)
检查mysql错误会发现:
<块引用>您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本以使用正确的语法 靠近 '='AT275981020' 然后是 '700' 结束案例'
我不知道您是否认为可以将 case
写为别名,或者该别名可以用来做什么。也许这只是您在 CASE
查询中找到的另一个 SELECT
块的错误复制面食。
最终,问题在于尾随的 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')
添加 WHERE
原因后,只有 3 行会被列入白名单以进行可能的修改——因此可以安全地从 ELSE
块中省略 CASE
。>
答案 5 :(得分:-2)
update ae44
set Price =
Case ID
when 'AT259793380' then '500'
when 'AT271729590' then '600'
when 'AT275981020' then '700'
end case