如何使用 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 中输入时,它会覆盖下一个字符 [重复]