我有我正在嘗試截斷的pages表。 我需要留下每個頁面的最後10個版本(頁面由uid
標識)。子查詢中WHERE子句中的未知列
id----|----uid----|----version
1 ----|---- 1 ----|---- 1
2 ----|---- 1 ----|---- 2
3 ----|---- 1 ----|---- 3
4 ----|---- 1 ----|---- 4
5 ----|---- 2 ----|---- 1
6 ----|---- 2 ----|---- 2
...........
55 ----|---- 1 ----|---- 23
56 ----|---- 2 ----|---- 14
57 ----|---- 2 ----|---- 15
我試過這個MySQL查詢:
DELETE FROM pages AS p WHERE p.id IN (
SELECT Versions.id FROM
(SELECT q.id FROM pages AS q WHERE p.uid = q.uid ORDER BY q.version DESC LIMIT 10)
AS Versions
)
但上面的SQL回報:
未知列 'p.uid' 在 'where子句'
關於Stackoverflow是像我的類似問題的答案的負載,但因爲我不是SQL忍者我無法合作打破這些以適應我的問題。 我不想過度殺死我的查詢。 必須有一些簡單的答案。
我可以實現MSSQL服務器需要截斷,下面的查詢:
DELETE FROM pages WHERE id NOT IN (
SELECT Versions.id FROM
(SELECT TOP (10) q.id FROM pages AS q WHERE pages.uid = q.uid ORDER BY q.version DESC)
AS Versions
)
感謝
你有沒有P別名在你的內心查詢 - 通過刪除也是爲什麼訂單? –
對不起,我已經從我用來測試的select查詢轉換了這個,因爲我不想刪除我的開發環境中的行。我現在改變了這個 –