位置: 编程技术 - 正文

基于SQL Server中如何比较两个表的各组数据 图解说明(sql server的相关技术知识)

编辑:rootadmin

开始

前一阵子,在项目中碰到这样一个SQL查询需求,有两个相同结构的表(table_left & table_right),如下:

图1.

检查表table_left的各组(groupId),是否在表table_right中存在有一组(groupId)数据(data)与它的数据(data)完全相等.

如图1. 可以看出表table_left和table_right存在两组数据完整相等:

图2.

分析

从上面的两个表,可以知道它们存放的是一组一组的数据;那么,接下来我借助数学集合的列举法和运算进行分析。

先通过集合的列举法描述两个表的各组数据:

图3.

这里只有两种情况,相等和不相等。对于不相等,可再分为部分相等、包含、和完全不相等。使用集合描述,可使用交集,子集,并集。如下面图4.,我列举出这几种常见的情况:

图4.

实现

在数据库中,要找出表table_left和表table_right存在相同数据的组,方法很多,这里我列出两种常用的方法。

(下面的SQL脚本,是以图4.的数据为基础参考)

方法1:

通过"Select … From …Order by … xml for path('') "把各组的data列数据连串起来(如,图4.把table_left的组#的列data连串起来成"data1-data2-data3"),其他分组(包含表table_right)以此方法实现data列数据连串起来;然后通过比较两表的连串后字段是否存在相等,若是相等就说明这比较多两组数据相等,由此可以判断出表table_left的哪组数据在表table_right存在与它数据完全相等的组。

针对方法1,需要对原表增加一个字段dataPath,用于存储data列数据连串的结果,如:

分组连串data列数据并update至刚新增的列dataPath,如:

接下来就是查询了,如:

完整代码:

方法2:

通过SQL Sever提供的集运算符"Except",判断两组非重复的数据。如果两组针对对方都不存在非重复的数据,就说明这两组数据完全相等。如,表table_left中的组#和表 table_right中的组#1,对列data进行"Except"集运算,无任是(# à #1)进行Except集运算,还是(#1 à # )进行Except集合运算,都返回空结果,这就说明组#1 和#的data数据完全相等,如:

同样道理,我们把表table_left中的组#和表 table_right中的组#2,对列data进行"Except"集运算,如:

只要(# à #2 )或 (#2 à # )的"Except"集运算结果有记录,就说明两组的数据不相等。

两张表的所有组都进行比较,我们需要通过以下SQL脚本实现,如:

完整代码:

方法1 Vs. 方法2 :

方法1和方法2都能找出表table_left在table_right存在数据完全相等的组#。但性能角度上,方法2比方法1略胜一筹,可以看它们执行过程的统计信息:

方法1:

图5.

方法2:

图6.

如果,数据量大情况下,那么方法2比方法1更具有明显的优点。因为方法1,多两个更新dataPath的部分,数据量随着增加,这里位置的更新就耗很多的资源;如果dataPath列数据大小超过字节,会导致无法在dataPath创建索引,影响后面的Select查询性能。

扩展

这里说扩展,主要是针对上面的方法2来说。在当列data的数据大小超过字节,或者含有多个数据列要进行比较,看是否存在两组(groupId)的各对应列数据一一相等。

图7.

这样的情况,可对字段dataSub1 & dataSub2 创建一个哈希索引,如:

后面的select查询语句,在Inner Join 部分稍改动下即可,如:

完整代码:

小结

对于这个问题,可能还有其他的或更优的解决方法.而且在实际的生产环境中,可能碰到的情况会有所不同,无论如何,需要多分析,多动手多实验,找到最优的解决方法。

推荐整理分享基于SQL Server中如何比较两个表的各组数据 图解说明(sql server的相关技术知识),希望有所帮助,仅作参考,欢迎阅读内容。

基于SQL Server中如何比较两个表的各组数据 图解说明(sql server的相关技术知识)

文章相关热门搜索词:sql server使用心得,使用sql server,sql server基础操作,sql server基于什么模型,sql server的相关技术知识,sql server基于什么模型,sql server使用心得,sql server基于什么模型,内容如对您有帮助,希望把文章链接给更多的朋友!

通过SQL绘制杨辉三角的实现方法介绍 无意中在csdn上看到一帖有关绘制杨辉三角的sql表达式,感觉很有意思。后来自己想下不借助临时表,根据杨辉三角的组合数计算方法C(n,m)=n!/[m!(n-m)!],

关于重新组织和重新生成索引sp_RefreshIndex的介绍 开始:--------------------------------------------------------------------------------在上周,客户反映一个系统问题,当处理大量数据的时候,出现网络超时。后来,

SqlServer获取存储过程返回值的实例 1.OUPUT参数返回值CREATEPROCEDURE[dbo].[nb_order_insert](@o_buyeridint,@o_idbigintOUTPUT)ASBEGINSETNOCOUNTON;BEGININSERTINTO[Order](o_buyerid)VALUES(@o_buyerid)SET@o_id=@@IDENTITYENDEND存储过

标签: sql server的相关技术知识

本文链接地址:https://www.jiuchutong.com/biancheng/347518.html 转载请保留说明!

上一篇:order by newid() 各种数据库随机查询的方法(order by使用)

下一篇:通过SQL绘制杨辉三角的实现方法介绍

  • 小规模纳税人增值税起征点
  • 年检更换需要什么材料
  • 办公楼出租价格怎么算
  • 劳动合同扣税太狠了吧
  • 生产车间维修费是制造费用还是管理费用
  • 快递公司增值税怎么算
  • 收到投资款的会计科目
  • 充值卡充值发票可以报销吗
  • 展厅门口如何布置图片
  • 没有税率的发票怎么开
  • 机械租赁的发票
  • a107040减免所得税优惠明细表2020
  • 残疾人名下有房产可以申请残疾人补贴吗?
  • 预计负债 负债
  • 无偿赠送的原材料怎么处理
  • 投资收益率的作用
  • 常见的电脑系统类型
  • 无法安装字体,显示字体无效win10
  • win11咋截屏
  • ryzen3 2200g相当于i几
  • 总公司人员的工资子公司发,如何报税?
  • 预收一年的30万怎么算
  • PHP:bzcompress()的用法_Bzip2函数
  • 增值税专票跨月但未认证,怎么作废
  • 记载资金的账簿印花税的税率是多少
  • 微信红包如何发出去
  • 葡萄牙海岸风光
  • 企业所得税合理方法包括
  • ERROR: Could not build wheels for opencv-python which use PEP 517 and cannot be installed directly
  • PHP使用http_build_query()构造URL字符串的方法
  • 进货成本价是什么
  • idea如何运行vue项目
  • lunux删除命令
  • 公司向股东个人借款的会计分录
  • 实现自己的http server loop_in_codes C++博客
  • 印花税账务处理会计分录
  • 上一年度企业所得税汇算清缴
  • 实缴的钱注销后可以拿回来吗
  • 测验3: 基本数据类型 (第3周)
  • mongodb聚合统计数量
  • 应收保费核算什么业务
  • 投资性房地产由成本模式转为公允价值模式
  • sql语句取并集
  • 异地预缴税金
  • 货物退回的会计怎么做账
  • 免税商品外汇业务
  • 利润敏感性分析法可以帮助企业有哪些决策?
  • 特许权使用费计入无形资产吗
  • 购进原材料发生的保险费
  • 私人借款条怎么写合法
  • 工资计提少了怎么办
  • 季节性移动的原因
  • 向法人借款凭证摘要怎么写
  • 持有待售的非流动资产减值能转回吗
  • 改制后的企业
  • 高新技术企业享受优惠时间
  • 企业成立第二年有补贴吗
  • win7系统怎么关闭病毒防护
  • windows自动执行
  • CentOS6 32/64位安装Adobe Flash Player组件的方法
  • solaris 安装
  • ksweb软件
  • service.exe是什么
  • windowsxp文件夹里面的文件突然消失
  • Win7 vpn连接不上怎么办?Win7系统vpn连接不上问题的解决方法
  • windows8网络连接
  • 建行网银盾在中国银行可以用吗
  • linux中的
  • linux如何快速入门
  • 网页shell命令
  • ligerUI---ListBox(列表框可移动的实例)
  • ajax动态加载json数据
  • [置顶]游戏名 TentacleLocker
  • android新手入门
  • fiori开发
  • 地税局网站查询发票
  • 江苏国家税务局电子税务局电话
  • 如何打印更正申请
  • 房产税怎么申报操作流程视频
  • 增值税网上申报步骤可以在手机上申报吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设