mysql - 从mysql表中删除重复值但保留一个
问题描述
我正在尝试从 mysql 表中删除重复的行,但仍保留一个。但是,以下查询似乎删除了每个重复的行,我不知道为什么。基本上,如果 outputID、title 和 type 都匹配,我想删除该行。
DELETE DupRows.*
FROM output AS DupRows
INNER JOIN (
SELECT MIN(Output_ID) AS Output_ID, Title, Type
FROM output
GROUP BY Title, Type
HAVING COUNT(*) > 1
) AS SaveRows
ON SaveRows.Title = DupRows.Title
AND SaveRows.Type = DupRows.Type
AND SaveRows.Output_ID = DupRows.Output_ID;
解决方案
只是 :
DELETE DupRows
FROM output AS DupRows
INNER JOIN output AS SaveRows
ON SaveRows.Title = DupRows.Title
AND SaveRows.Type = DupRows.Type
AND DupRows.Output_ID > SaveRows.Output_ID
这将删除所有重复项Title
,Type
同时保留最低值的记录。
如果您正在运行 MySQL 8.0,您可以使用窗口函数ROW_NUMBER()
为 Title/Type 组中的每条记录分配一个排名,按 id 排序。然后你可以删除所有行号不为 1 的记录。
DELETE FROM output
WHERE Output_ID IN (
SELECT Output_ID
FROM (
SELECT Output_ID, ROW_NUMBER() OVER(PARTITION BY Title, Type ORDER BY Output_ID) rn
FROM output
) x
WHERE rn > 1
)
推荐阅读
- python-3.x - Py charm 冻结图未将 8 个变量转换为常量操作
- android - 隐式 Intent 的安全性如何?
- javascript - 超过 1 个系列的 Highchart 显示未显示
- python - Python3.7:多行字符串之间的正则表达式?
- corda - Corda:在一个流程中创建和使用相同的状态?
- java - 对 assertEquals 的模糊引用
- python - 从 Google Composer (Airflow) 中检索 Kubernetes 的秘密
- android - 没有符合条件的设备进行应用安装。| 安卓 | 奥利奥 8.1.0
- php - 无法使用 Slim 框架将图像保存到数据库和文件夹
- java - 我应该在流中改变对象吗?