【问题标题】:How to update based on anoter row in the same table?如何根据同一张表中的另一行进行更新?
【发布时间】:2011-10-04 09:04:05
【问题描述】:

我想创建一个查询,该查询根据 id 高 1 的行的 int 更新 int。

我试过这个查询,但它说我不能在更新语句中标记表。但是如何在我的子查询中引用它呢?

update t1 a set `int1` = (select `int1` from t1 b where b.id=a.id+1);

如何克服无法使用别名的问题?

【问题讨论】:

    标签: mysql sql-update correlated-subquery


    【解决方案1】:

    试试这个 -

    UPDATE
      t1 a
      JOIN t1 b
        ON b.id = a.id + 1
    SET
      a.int1 = b.int1;
    

    如果id 值有漏洞,查询可能会改变。

    【讨论】:

    • 它有效,但就像他说的那样,ON 子句应该是:ON b.id = a.id + 1
    • 哦,是的。我已经改变了答案。
    • 谢谢。出于好奇,为什么我的例子不起作用?谁能解释一下?
    • 来自参考 - '目前,您无法更新表并在子查询中从同一个表中进行选择。'我认为这可以解释这种行为。 dev.mysql.com/doc/refman/5.1/en/update.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多