Как перезаписать следующие строки с помощью UPDATE?

#php #mysql #sql #sql-update #self-join

#php #mysql #sql #sql-обновление #самосоединение

Вопрос:

У меня есть эта таблица MYSQL (упрощенная версия) с некоторыми удаленными идентификаторами:

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

Как мне перезаписать каждую строку из «John» с помощью php? (фамилия «Liam» удаляется)

Я хочу, чтобы это выглядело так:

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

Комментарии:

1. вы хотите обновить таблицу или просто вернуть эти значения

Ответ №1:

Я понимаю, что вы хотите скопировать каждое имя в «следующую» строку.

Если вы используете MySQL 8.0, вы можете сделать это с помощью функций self join и window:

 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)