如何使用 UPDATE 覆盖下一行?

Posted

技术标签:

【中文标题】如何使用 UPDATE 覆盖下一行?【英文标题】:How to overwrite next rows using UPDATE? 【发布时间】:2020-12-29 00:15:26 【问题描述】:

我有这个 MYSQL 表(简化版),其中一些 id 被删除:

+-----+-------+---------+
| id  | name  | country |
+-----+-------+---------+
| 1   | John  | England |
| 5   | Emily |   USA   |
| 9   |  Joe  |   USA   |
| 11  |Michael|   USA   |
| 13  | Liam  |   USA   |
+-----+-------+---------+

如何使用 php 覆盖“John”中的每一行? (姓“Liam”被踢出)

我希望它看起来像这样:

+-----+-------+---------+
| id  | name  | country |
+-----+-------+---------+
| 1   | John  | England |
| 5   | John  |   USA   |
| 9   | Emily |   USA   |
| 11  |  Joe  |   USA   |
| 13  |Michael|   USA   |
+-----+-------+---------+

【问题讨论】:

你想更新表格还是只返回那些值 【参考方案1】:

我了解到您想复制“下一个”行中的每个名称。

如果您运行的是 mysql 8.0,则可以使用自联接和窗口函数来执行此操作:

update mytable t
inner join (
    select id, lag(name) over(order by id) as lag_name
    from mytable
) t1 on t1.id = t.id
set t.name = t1.lag_name
where t1.lag_name is not null

【讨论】:

【参考方案2】:

您可以按如下方式使用相关查询:

Update your_table t
   Set t.name = 
       Coalesce(Select ttt.name from your_table ttt 
                 where ttt.id = (Select max(tt.id) from your_table tt
                                 Where tt.id < t.id))
              , t.name)

【讨论】:

以上是关于如何使用 UPDATE 覆盖下一行?的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试在 Visual Studio 中输入时,它会覆盖下一个字符 [重复]

word中打字会覆盖下一个字

敲代码指向光标会覆盖下一个字符,无法用空格换行,无法打字或打字会把后面的文字覆盖解决方法

关于一个DIV覆盖于另一个DIV下

给GridView设置行高

使鼠标事件的对象“透明”?