好子查詢的所有結果,所以如果你想一回的故事,看我previous questionMySQL的刪除
搞清楚其中我的記錄是不是重複是很容易的:
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
這將返回所有非重複項。所以我想我會將它們移動到另一個名爲「no_duplicates」的表中,然後從原始表中刪除它們。然後,我可以在原始表格中單獨看到重複項,然後修復它們,然後添加no_dupes。不過,雖然:
INSERT INTO no_duplicates
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
工程就像一個魅力,下面拋出一個錯誤:
DELETE
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
我的猜測是,雖然該查詢返回唯一的,已經在最表記錄,通過刪除聚合函數不是猶太教。這是可以理解的,除了我不知道我能做些什麼來確保只有我移動的記錄被刪除。我搜索並沒有發現「INSERT殺死原始表中的記錄後」語法,我的猜測是它會失敗,因爲刪除失敗的原因相同。
那麼,有人能幫我找到失蹤的一塊嗎?
對不起,我是儘可能有效地抓住一切。我知道ORDERS不是刪除東西的必要條件。我很快就知道GROUP BY和HAVINGs已經不在了,所以這個問題。 – Anthony 2009-09-08 08:10:16
DELETE中的**不允許**(除了毫無意義) – soulmerge 2009-09-08 10:21:53
絕對* ORDER *在MySQL的'DELETE'中允許。 [並且已經很長時間了。](https://dev.mysql.com/doc/refman/4.1/en/delete.html)*「如果DELETE語句包含ORDER BY子句,則行是按照子句中指定的順序刪除,主要用於與LIMIT結合使用...... ORDER BY在某些情況下也可能有用,以避免違反參照完整性的順序刪除行ORDER BY可以與DELETE一起使用從MySQL 4.0.0開始。「* – dkarp 2015-04-23 23:11:48