MySQL在Update语句中引用新旧值

时间:2014-11-19 20:06:19

标签: mysql sql sql-update

我想创建一个连接,我可以根据另一个表中字段的新旧值更新字段。例如:

UPDATE
    table1,
    table2
SET
    table1.field1 = newDate
    table2.field2 = table1.field1 -- The NEW date I am setting above in field1 ^
WHERE
    table2.field2 = table1.field1 -- The OLD date currently set in table1.field1

这可能吗?我尝试使用newold条款,但不起作用。

修改 如果你非常友好地无缘无故地投票。请以某种方式贡献......

1 个答案:

答案 0 :(得分:1)

我可以建议您将查询短语为:

UPDATE table1 JOIN
       table2
       ON table2.field2 = table1.field1
    SET table1.field1 = newDate,
        table2.field2 = newDate

似乎消除了引起混淆的歧义。

编辑:

您似乎非常希望只引用newDate一次。您可以使用子查询执行此操作:

UPDATE table1 JOIN
       table2
       ON table2.field2 = table1.field1 CROSS JOIN
       (select @newDate as newDate) vars
    SET table1.field1 = vars.newDate,
        table2.field2 = vars.newDate;

我不清楚动机,但这提供了一种只提及它的机制。

如果它可以帮助您了解更新,请根据SQL标准考虑它们的工作方式。在将值提交到数据库之后才会发生update。也就是说,没有"新的"正在处理update时表中的值。 MySQL并不一定以这种方式运行,但这是update工作原理的一个很好的模型。