使用嵌入式IF()逻辑的REPLACE语句?

时间:2011-06-14 14:28:40

标签: mysql replace

编辑:这实际上工作正常,不知道为什么我不这么认为。

我有一个价格表,其中包含一列price_was,需要包含价格最高的价值。

是否可以执行REPLACE查询,如果需要可以更新它?

以下(在PHP中动态简化和构建)似乎不起作用。

REPLACE prices
SET     price = 1.99,
        price_was = IF(1.99 > price_was, 1.99, price_was)
        id_product = 1

我想也许这是不可能的,但是我很乐意听到,因为我正在更新许多记录并且需要尽可能高效。

2 个答案:

答案 0 :(得分:2)

您发布的查询确实有效,请亲自尝试。我会使用UPDATE,因为你只更新了一个字段,并且REPLACE可以覆盖你想要的其他列数据。

答案 1 :(得分:0)

请尝试INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO prices (price, price_was, id_product)
   VALUES (1.99, 1.99, 1)
ON DUPLICATE KEY UPDATE 
   price_was = IF(VALUES(price) > price_was, VALUES(price), price_was)
   id_product = VALUES(id_product)

这将执行INSERT或UPDATE,而REPLACE语句执行INSERT或DELETE后跟INSERT。您无法在REPLACE语句中引用旧值,可能是因为DELETE / INSERT语义。来自the docs

  

所有列的值均取自   REPLACE中指定的值   声明。设置了任何缺失的列   到它们的默认值,就像   INSERT发生了。 你不能参考   来自当前行和使用的值   他们在新的一行。如果你使用的话   分配,例如SET col_name =   col_name + 1,引用   右侧的列名是   被视为DEFAULT(col_name),所以   赋值等同于SET   col_name = DEFAULT(col_name)+ 1。