T-Sql
使用 CTE 更新表
我想更新我的表的排名,
Performance
我找到了這個解決方案,但我不明白為什麼這個 SQL 程式碼有效:WITH cte AS ( SELECT AllTimeRank, r = RANK () OVER (PARTITION BY Distance ORDER BY TimeInSeconds) FROM dbo.Performance ) UPDATE cte SET AllTimeRank = r FROM cte;
聲明說
UPDATE CTE
,但實際上,它確實更新了表 (dbo.Performance
)。有人可以解釋一下這個魔法嗎?
以下語句似乎完全相同:
WITH cte AS ( SELECT Id, r = RANK () OVER (PARTITION BY Distance ORDER BY TimeInSeconds) FROM dbo.Performance ) UPDATE dbo.Performance SET AllTimeRank = r FROM cte INNER JOIN dbo.Performance p ON p.Id = cte.Id;
沒有魔法。在這種情況下,CTE 是一個可更新的視圖。
可更新和可插入的視圖:
以下語句似乎完全相同:
一般來說 - 沒有。簡單地想像這
id
不是唯一的。第一個選項更好嗎?
無法比較具有不同(一般)邏輯的兩個查詢。-秋名