MySQL删除所有子查询结果

Ant*_*ony 4 mysql insert duplicates sql-delete

好的,所以如果你想要一个背景故事,请看看我之前的问题

弄清楚哪些记录不重复很容易:

SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
Run Code Online (Sandbox Code Playgroud)

这将返回我的所有非重复项.所以我想我会把它们移到另一个名为"no_duplicates"的表中,然后从原始表中删除它们.然后我可以在原始表中单独看到重复项,修复它们,然后添加no_dupes.但同时:

INSERT INTO no_duplicates
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
Run Code Online (Sandbox Code Playgroud)

像魅力一样工作,以下引发错误:

DELETE
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
Run Code Online (Sandbox Code Playgroud)

我的猜测是,当查询返回唯一的,已经在表中的记录时,通过聚合函数删除不是犹太教.这是可以理解的,除了我不知道我还能做些什么来确保只删除我移动的记录.我搜索并发现没有"在INSERT中删除原始表中的记录后"语法,我的猜测是它无论如何都会失败,因为删除失败的原因相同.

那么,有人可以帮我找到丢失的一块吗?

Kos*_*801 6

首先,您不需要INSERT和DELETE上的ORDER BY.如果你需要它们用于演示,这是非常有用的,而这些操作并非如此.

如果您的EVENTLOG表有一个主键(如ID),您可以像这样形成DELETE语句:

DELETE 
FROM eventlog
WHERE id IN (
  SELECT *
  FROM eventlog
  GROUP BY event_date, user
  HAVING COUNT(*) = 1
)
Run Code Online (Sandbox Code Playgroud)