2011-07-17 92 views
1

我在SQL Server論壇上發現瞭如何對錶中的記錄重新排序的解決方案。PostgreSQL使用帶子選擇更新的記錄重新排序

UPDATE SomeTable 
SET rankcol = SubQuery.Sort_Order 
FROM 
    (
    SELECT IDCol, Row_Number() OVER (ORDER BY ValueCOL) as SORT_ORDER 
    FROM SomeTable 
    ) SubQuery 
INNER JOIN SomeTable ON 
SubQuery.IDCol = SomeTable.IDCol 

,當我試圖做同樣的在PostgreSQL上,我得到一個錯誤信息 -

錯誤:表名「sometable」指定不止一次

任何幫助將不勝感激。

謝謝!

+0

重新排序行和列設置的值(這是該查詢顯然試圖做)是兩回事。 –

回答

4

你不需要顯式加入SomeTable,那有多酷? :)

UPDATE SomeTable 
SET rankcol = SubQuery.Sort_Order 
FROM 
    (
    SELECT IDCol, Row_Number() OVER (ORDER BY ValueCOL) as SORT_ORDER 
    FROM SomeTable 
    ) SubQuery 
where SubQuery.IDCol = SomeTable.IDCol 

備註:Postgres的是不區分大小寫,更好地使用較低的情況下,像row_numbersort_orderid_col

+0

工作。謝謝! – user558122