sql - 删除重复项并保留一份副本
问题描述
我一直在研究有关从表中删除重复项并保留一份副本的线程。我已经看到了一个插图,说明一个表有一个带有复合键的表。有这个想法的人吗?
具有复合键 checkno、salary_month、sal_year 的表控件
delete (select * from CONTR t1
INNER JOIN
(select CHECKNO, SALARY_YEAR,SALARY_MONTH FROM CONTR
group by CHECKNO, SALARY_YEAR,SALARY_MONTH HAVING COUNT(*) > 1) dupes
ON
t1.CHECKNO = dupes.CHECKNO AND
t1.SALARY_YEAR= dupes.SALARY_YEAR AND
t1.SALARY_MONTH=dupes.SALARY_MONTH);
我希望删除一个副本并保留一个副本。
解决方案
假设你有你提到的 3 列的欺骗,实现此目的的另一种方法是
- 创建具有不同值的临时表
- 放下你的桌子
- 重命名临时表
特别是如果您以这种方式处理大量数据,这将比删除快得多。
如果您正在处理的 dup 数据是主表的子集,则步骤将是
- 创建具有不同值的临时表
- 从主表中删除所有 dup 列
- 将临时表中的数据插入主表
第一步的 SQL 将是
create table tmp_CONTR AS
select distinct CHECKNO, SALARY_YEAR,SALARY_MONTH -- this part can be modified to match your needs
from CONTR t1;
推荐阅读
- ruby-on-rails - Ruby on Rails/Postgres - 如何为不存在的用户创建新数据库?
- xml - Google 表格中的 XPath
- c# - C# WPF StackPanel 中不需要的间距/图像大小调整
- qt - Qml 地图项偏移
- node.js - Firebase 函数返回 400
- recaptcha - reCaptcha 复选框旋转 15 秒,然后保持未选中状态
- python - Python 3:为动态类设置命名空间
- python - 在不使用 .pop 的情况下替换列表中的项目?
- javascript - Google Places Autocomplete Dropdown - 如何在没有建议的下拉列表中添加自定义行?
- python - 使用列表生成 json 布局