繁体   English   中英

MySQL删除所有子查询结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM