[英]MySQL delete all results of sub-query
好的,所以如果你想要一个背景故事,请看看我之前的问题
弄清楚哪些记录不重复很容易:
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中删除原始表中的记录后”语法,我的猜测是它无论如何都会失败,因为删除失败的原因相同。
那么,有人可以帮我找到丢失的一块吗?
首先,您不需要INSERT和DELETE上的ORDER BY。 如果您需要它们用于演示,这是非常有用的,而这些操作并非如此。
如果您的EVENTLOG表有一个主键(如ID),您可以像这样形成DELETE语句:
DELETE
FROM eventlog
WHERE id IN (
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
)
我不会删除聚合函数。 我想你想删除所有插入的数据?
为什么不尝试这样的事情:
DELETE
FROM eventlog
WHERE (user, event_date) IN (SELECT user, event_data FROM no_duplicates)
什么是数据库? 如果MySQL那么
目前,您无法从表中删除并从子查询中的同一表中进行选择。
至少为5.0版本。 ( http://dev.mysql.com/doc/refman/5.0/en/delete.html )
你应该看一下DELETE语法 ,既没有GROUP BY,也没有HAVING,也没有ORDER。
您可以尝试添加主键自动增量列,将您的唯一身份移动到新表中并执行删除事件日志。*来自事件日志e内部联接no_dupes nd on e.id = nd.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.