编写此SQL查询是否有更好/更有效/更短的方法:
UPDATE mTable SET score = 0.2537 WHERE user = 'Xthane' AND groupId = 37;
UPDATE mTable SET score = 0.2349 WHERE user = 'Mike' AND groupId = 37;
UPDATE mTable SET score = 0.2761 WHERE user = 'Jack' AND groupId = 37;
UPDATE mTable SET score = 0.2655 WHERE user = 'Isotope' AND groupId = 37;
UPDATE mTable SET score = 0.3235 WHERE user = 'Caesar' AND groupId = 37;
答案 0 :(得分:5)
UPDATE mTable
SET score =
case user
when 'Xthane' then 0.2537
when 'Mike' then 0.2349
when 'Jack' then 0.2761
when 'Isotope' then 0.2655
when 'Caesar' then 0.3235
else score
end
where groupId = 37
答案 1 :(得分:1)
您可以使用CASE
语句执行此类UPDATE
。
UPDATE mTable
SET score
= CASE user
WHEN 'Xthane' THEN 0.2537
WHEN 'Mike' THEN 0.2349
WHEN 'Jack' THEN 0.2761
WHEN 'Isotope' THEN 0.2655
WHEN 'Caesar' THEN 0.3235
ELSE score
END
WHERE groupId = 37
答案 2 :(得分:0)
您可以为要更新的所有记录创建临时表,插入分数,用户和groupid,然后执行以下操作:
UPDATE
FROM mTable m
INNER JOIN tmpTable t
ON m.groupId = t.groupId
AND m.user = t.user
SET m.score = t.score;
答案 3 :(得分:0)
您的原始语句看起来很短,并且很容易理解,您可以确定每个单独的UPDATE语句是否有任何行受到影响。
但是,对于大量语句,会有相当多的开销使数据库“往返”以执行每个单独的语句。通过在单个语句执行中将更新“批处理”在一起,您可以更快地执行大量更新(更短的时间)。
所以,这取决于你想要实现的目标。
更好?取决于你如何定义它。 (这些陈述应该更容易理解,更容易调试,资源消耗更少吗?
效率更高?就减少的运行时间而言,是的,还有其他方法可以实现这些相同的更新,但这些语句并不像您的那样容易理解。
更短的?对于具有较少字符的SQL语句,是的,有一些方法可以实现这一点。 (其他答案中显示了一些示例,但请注意,其中一些答案中的陈述效果与您的陈述明显不同。)
这些替代方案的实际性能实际上取决于行数和可用索引。 (例如,如果您有数十万行,其中groupId = 37,但只更新其中5行)。