当前位置: 首页 > news >正文

处理SQL Server中的重复行

 

如果表中的数据需要基于行中的多个值具有唯一约束,则适合的解决方案将是复合健。

复合主键

使用SQL Server语法创建符合主键非常简单。

create table my_parts
(
    id_part1 int not null,
    id_part2 int not null,
    id_part3 int not null,
    primary key(id_part1,id_part2,id_part3)
)
GO

在已经存在的表的情况下,通过简单的查询,复合键约束也很容易。

ALTER TABLE my_parts
  ADD  PRIMARY KEY (id_part1, id_part2,id_part3);
GO

但是对于传统的现有系统,当您不允许在正在生产的系统中进行大的更改时,您必须通过简单地找到它们然后从表数据中删除它们来处理重复项。

这可能是一个真正的头痛,特别是如果现有数据对于实时系统运行至关重要

首先要找到重复的东西。

SELECT  id_part1 ,
        id_part2 ,
        id_part3 ,
        COUNT(*) AS [count]
FROM    dbo.my_parts (NOLOCK)GROUP BY id_part1 ,
        id_part2 ,
        id_part3
HAVING  COUNT(*) > 1;

 复合唯一约束

在某些情况下,您可能有一个表的主键和一个复合键。在这种情况下,查找重复的查询对你没有什么用,因为您将获得所有复合键值的重复数量,但由于主键对于每一行都是唯一的,因此您不能通过在查询中包含主键来进行分组。

要获得这样的tbale,你需要采用一种不同的方法来创建它,以防你从头开始。

CREATE TABLE my_parts
    (
      id INT IDENTITY(1,1) NOT NULL,
      id_part1 INT NULL ,
      id_part2 INT NULL ,
      id_part3 INT NULL ,
      PRIMARY KEY CLUSTERED (id),
      CONSTRAINT [CK_my_parts] UNIQUE (id_part1,id_part2,id_part3)
    );
GO

如果您正在处理现有数据库,该数据库已经包含要包含在复合唯一约束中的列值的重复项,则在添加约束之前,您需要从重复项中清除表。只有这样,您才能使用现有数据将复合唯一contrsint添加到existig表中。

DELETE  FROM dbo.my_parts
WHERE   id NOT IN ( SELECT  MIN(id)
                    FROM    dbo.my_parts
                    GROUP BY id_part1 ,
                            id_part2 ,
                            id_part3 );

转载于:https://www.cnblogs.com/ZaraNet/p/10156278.html

相关文章:

  • 互联网视频直播技术(广电总局、优酷土豆、XX直播)
  • Zookeeper Clustered (Multi-Server) Deployment
  • 孤儿进程 僵尸进程 守护进程及wait函数详解
  • 利用Java反射机制实现对象相同字段的复制
  • Markdown基本语法
  • 浅探前端图片优化
  • kubernetes 监控方案之:heapster+influxdb+grafana(十八)
  • Servlet-生命周期
  • CSS 文字太多用省略号表示
  • 互联网轻量级框架SSM-查缺补漏第四天
  • 无需Java代码通过JHipster生成有安全验证的微服务应用
  • BZOJ5341[Ctsc2018]暴力写挂——边分治+虚树+树形DP
  • JS变量作用域
  • android环境搭建
  • Windows10 VS2017 C++多线程传参和等待线程结束
  • SegmentFault for Android 3.0 发布
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • jQuery(一)
  • js ES6 求数组的交集,并集,还有差集
  • Material Design
  • mysql innodb 索引使用指南
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • PHP变量
  • Python十分钟制作属于你自己的个性logo
  • Terraform入门 - 3. 变更基础设施
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 前端知识点整理(待续)
  • 如何利用MongoDB打造TOP榜小程序
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 说说我为什么看好Spring Cloud Alibaba
  • ​比特币大跌的 2 个原因
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #pragam once 和 #ifndef 预编译头
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)mysql_MYSQL(三)
  • (四)c52学习之旅-流水LED灯
  • (转) ns2/nam与nam实现相关的文件
  • ***详解账号泄露:全球约1亿用户已泄露
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET CF命令行调试器MDbg入门(一)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net经典笔试题
  • .net中调用windows performance记录性能信息
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @JSONField或@JsonProperty注解使用
  • [16/N]论得趣
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [C# 开发技巧]实现属于自己的截图工具