[英]SQL Order By and Update a Column
我在這個 SO 問題中列出了相同的問題,但我已經嘗試了解決方案,但我收到了 SQL 錯誤 1288-我認為我無法將 SQL 服務器轉換為 SQL,或者此方法已被棄用。 目前有這樣做的方法嗎?
我需要按列排序,然后遍歷我的新列,添加新訂單並更好地維護以備將來插入和刪除。 我當前用於更新新列的 SQL 查詢如下所示(與上面給出的解決方案相同):
With cte As
(
SELECT ColumnToOrderBy,NewColumn,
ROW_NUMBER() OVER (ORDER BY ColumnToOrderBy) AS i
FROM TableToUpdate
)
UPDATE cte SET NewColumn=i
我繞過一個 cte,剛剛創建了一個包含兩個必要列的顯式臨時表,運行 ROW_NUMBER function,然后將原始表的列設置為新的排序臨時列。 代碼如下:
CREATE TEMPORARY TABLE temp
(ColumnToOrderBy INT,
NewColumn INT);
INSERT INTO temp
SELECT PrimaryKey,
ROW_NUMBER() OVER (ORDER BY ColumnToOrderBy) AS NewColumn
FROM TableToUpdate;
UPDATE TableToUpdate update
INNER JOIN temp t ON update.ColumnToOrderBy= t.ColumnToOrderBy
SET update.NewColumn= t.NewColumn;
DROP TABLE temp;
如果使用大表,我不認為這是一個快速或有效的解決方案,但對於一個小的修復,這是可行的。
您的代碼不起作用,因為 MySql 不支持(尚)可更新的 ctes。
假設ColumnToOrderBy
是唯一的或主鍵,因此順序是唯一定義的,您可以在UPDATE
語句中使用自連接來實現:
UPDATE TableToUpdate t
INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY ColumnToOrderBy) rn FROM TableToUpdate) r
ON r.ColumnToOrderBy = t.ColumnToOrderBy
SET t.NewColumn = r.rn;
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.