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中删除原始表中的记录后"语法,我的猜测是它无论如何都会失败,因为删除失败的原因相同.
那么,有人可以帮我找到丢失的一块吗?
首先,您不需要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)
| 归档时间: |
|
| 查看次数: |
18145 次 |
| 最近记录: |