作者:绿色风
分类:
时间:2022-08-18
浏览:194
楼主 海绵宝宝 |
因为EXCEL-SQL中没有差集运算,所以我们考虑使用IN来进行条件筛选- select * from [表A$] where 字段1&字段2&字段3…… not in (select 字段1&字段2&字段3…… from [表B$])
例如下面的这个语句- select distinct a.学号,a.课程性质,a.课程名称 from (select 学号,"必修" as 课程性质,课程名称 from [表1$],[表2$]) as a where a.学号&a.课程性质&a.课程名称 not in (select 学号&课程性质&课程 from [表1$])
还有WISE版主的写法- select D.学号,D.课程名称 from ( select * from (select distinct 学号 from [表1$]) A ,(select * from [表2$] ) B ) D
- 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 |
- 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总版主之一