#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)