ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > SQL in Excel > 如何用SQL提取A表有而B表没有的记录

如何用SQL提取A表有而B表没有的记录

作者:绿色风 分类: 时间:2022-08-18 浏览:194
楼主
海绵宝宝
因为EXCEL-SQL中没有差集运算,所以我们考虑使用IN来进行条件筛选
  1. select * from [表A$] where 字段1&字段2&字段3…… not in (select 字段1&字段2&字段3…… from [表B$])
例如下面的这个语句
  1. select distinct a.学号,a.课程性质,a.课程名称 from (select 学号,"必修" as 课程性质,课程名称 from [表1$],[表2$]) as a where a.学号&a.课程性质&a.课程名称 not in (select 学号&课程性质&课程 from [表1$])
还有WISE版主的写法
  1. select D.学号,D.课程名称 from ( select * from (select distinct 学号 from [表1$]) A ,(select * from [表2$] ) B ) D
  2. where D.学号&D.课程性质&D.课程名称 not in (select 学号&课程性质&课程 from [表1$])
对于这种问题的SQL处理效率太差了,但本人也实在想不到什么好的方法,关键是做了&运算的原因,所以使得语句执行效率大大减慢,希望有人能提出这种问题的高效SQL解决方法,这帖子算做个抛砖引玉吧,同时希望excel-sql能像别的SQL一样支持差集运算就好了

下面是这个问题的两个附件,来自社区
输出每个学生在表2中未修课程-mxqchina.zip
答案结果.rar
2楼
wise
还有就是distinct的用法的关系
3楼
mn860429
应该可以用连接做,access里不匹配查询向导用的就是连接查询。
4楼
mn860429
  1. select * from (select distinct 学号 from [表1$]),[表2$]) a left join [表1$] b on a.学号 =b.学号 and a.课程名称 =b.课程 where b.学号 is null
5楼
wise
还有选修啊,呵呵
6楼
海绵宝宝
这语句符合要求哇?
7楼
LOGO
distinct 改用group by 来获取唯一值会快一些。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap