在將新行添加到資料庫后,我使用此查詢按日期重寫 id 編號列。即使查詢運行良好,我也無法修復查詢末尾顯示的錯誤。有什么建議嗎?
SET @ROW = 0;
UPDATE `mytable` SET `id` = @ROW := @ROW 1 ORDER BY `date` ASC;
Warning: #1287 Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'.
我試圖修改查詢
set id = "0";
UPDATE `mytable` SET := id 1 ORDER BY `data` ASC;
沒有成功。
uj5u.com熱心網友回復:
用戶變數大多被 MySQL 8.0 中可用的視窗函式所取代。
row_number() 您可以使用update/join語法來滿足您的要求:
update mytable t
inner join (select id, row_number() over(order by date, id) new_id from mytable) t1
on t.id = t1.id
set t.id = t1.new_id
DB Fiddlde 上的演示。
這假定這id是一個唯一的開始鍵。
我仍然會質疑為什么您需要更改看起來像代理主鍵的內容。您可以根據需要在查詢中即時計算行號,或者使用視圖:
create view myview as
select t.*, row_number() over(order by date, id) new_id from mytable t
DB Fiddlde 上的演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524165.html
上一篇:MYSQL中基于多列的累積和
