不使用EXCEPT函数下求差集
Oracale 和 SQLSERVER 中皆有差集函数去比较两个数据集合中的差异的数据 => EXCEPT
使用如下:
SELECT FASSETID,FALTERID,FCKFUNDPROVIDED FROM KDY_T_FA_FUNDBALANCE WHERE FYEAR = 2022 AND FPERIOD = 10
EXCEPT
SELECT FASSETID,FALTERID,FCKFUNDPROVIDED FROM KDY_T_FA_FUNDBALANCE WHERE FYEAR = 2022 AND FPERIOD = 11
查询结果如下:
mysql 中无EXCEPT函数,故有两种方法去求得差集:
1.not exists
上面SQL语句可以替换如下语句:
SELECT FASSETID,FALTERID,FCKFUNDPROVIDED FROM KDY_T_FA_FUNDBALANCE A WHERE FYEAR = 2022 AND FPERIOD = 10 AND NOT EXISTS(
SELECT 1 FROM KDY_T_FA_FUNDBALANCE B WHERE FYEAR = 2022 AND FPERIOD = 11 AND B.FASSETID = A.FASSETID AND B.FALTERID = A.FALTERID AND B.FCKFUNDPROVIDED = A.FCKFUNDPROVIDED
)
2.left join
用左(右)连接来求差集,由于需要实施两表连接会导致笛卡尔效应其输出集的记录行可能会增多,
若果不是一对一或一对多,我们应该将多对多的情况处理成多对一后才进行连接,否则输出的记录集可能不正确。
总结:求差集的两种方法,有索引可利用时,not exists的效率要高于left join,反之left join效率更好
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-12-07 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10()随机1~10
2018-12-07 解决 Visual Studio 2017 打开项目提示项目不兼容