【问题标题】:SQL reference current record ("this") in querySQL 在查询中引用当前记录(“this”)
【发布时间】:2011-05-12 06:46:47
【问题描述】:

我有一张这样的桌子:

id | NODE_ID | last_updated
1  |  4      | 11-29-2010 ... 

last_updated 列设置为在使用“on update CURRENT_TIMESTAMP”对行进行任何更改后更新

我需要更新所有 NODE_ID 为 4 到 5 的记录,但我想保持时间戳不变。

我正在考虑进行更新并引用查询中当前选定的行以手动设置时间戳...令人困惑...像这样

更新作业集 NODE_ID=4, last_updated = this.last_updated where NODE_ID = 5;

我可以用什么来替换查询中的“this”?如果我不能,那么做这种事情的最佳方法是什么?

~肖恩

PS。 mysql Ver 14.12 Distrib 5.0.86,用于 redhat-linux-gnu (i686) 使用 readline 5.1

【问题讨论】:

    标签: mysql


    【解决方案1】:

    应该这样做:

    update jobs set NODE_ID=4, last_updated = last_updated where NODE_ID = 5;
    

    ETA:最初我认为这不会起作用,因为我认为 on update 约束会在您设置值后执行,删除您的“更改”(或缺少更改)。但是this 让我相信事实并非如此。

    【讨论】:

    • 所以我想查询中存在对“this”记录的固有引用。这应该很明显,因为您基本上总是在“where”子句中引用相同的(当前)记录。谢谢大家!
    【解决方案2】:

    如果这是一次更新,您可以在运行之前移除约束,然后在完成后添加。见here。 我认为您想做的事情不会起作用,因为 Mysql 可能会在评估查询后触及时间戳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多