好子查询的所有结果,所以如果你想一回的故事,看我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