在MySQL中使用CASE语句更新多行

时间:2012-10-10 16:59:21

标签: mysql syntax

我无法弄清楚这一点,这里有很多关于堆栈溢出的例子,但每个都存在差异,并且它们都给出了同样的问题。

我有一个80“幻灯片”的列表,其中有一个名为“order”的列。订单是一个数字,目前介于0到79之间。

如果我们删除幻灯片,我们需要调整幻灯片之后的幻灯片,我已经算出了算法。

以下是算法的结果:

UPDATE cms_slides SET order = 
    CASE order
        WHEN 68 THEN 67
        WHEN 69 THEN 68
    END CASE
WHERE order BETWEEN 68 AND 69

这是当前代码基于Soulmerge的解决方案:Updating display order of multiple MySQL rows in one or very few queries

列“order”实际上位于“cms_slides”中,值1到69都存在于“order”下。

错误消息是典型的:错误:您的SQL语法中有错误;查看手册......

有谁知道代码有什么问题?我尝试了许多变化但没有工作,这可能很简单。

1 个答案:

答案 0 :(得分:2)

ORDER是MySQL中的reserved word你应该使用反引号,你不需要END CASE只使用END

UPDATE cms_slides SET `order` = 
    CASE `order`
        WHEN 68 THEN 67
        WHEN 69 THEN 68
    END 
WHERE `order` BETWEEN 68 AND 69