Access SQL distinct 去重失效问题
今天碰到一个很奇怪的问题,开发的一个考试系统采用Access数据库作为题库,里面建了类似下面这样的临时表用于导入Excel格式的题库:
ID(自增,长整型) | 专业(文本) | 科目(文本) | 题型(文本) | 正文(备注) | 正文哈希(长整型) |
---|---|---|---|---|---|
1 | 计算机 | 数学 | 单选题 | AAA | FF |
2 | 计算机 | 数学 | 单选题 | BBB | CC |
3 | 信息工程 | 数学 | 单选题 | AAA | FF |
4 | 信息工程 | 数学 | 单选题 | CCC | DD |
先在Access 2007中创建了这样结构的一个空表,然后将Excel题库导入该表的专业、科目、题型、正文字段,再通过自定义的一个函数通过正文字段计算出正文哈希字段,如上表所示,随后通过SQL语句:
SELECT DISTINCT 正文, 正文哈希 FROM 临时表 AS A LEFT JOIN 问题正文表 AS B ON A.正文哈希=B.正文哈希 WHERE A.正文=B.正文
去重时却发现DISTINCT去重失效了,如上面的表中,ID为1和3的行正文和正文哈希均完全相同,但却仍然两个都显示出来了,尝试了很久才发现是因为正文哈希字段设置了索引,导致DISTINCT失效,去掉该字段的索引就恢复正常了,但不知道为什么索引会影响DISTINCT去重。
PS:问题原因找到了,确认这是Access的一个BUG,触发条件为 正文字段为备注 (Memo)、使用 LEFT JOIN (子查询)时有时就会出现,解决办法为在出现BUG的语句后再添加一个WHERE子句,例如
SELECT DISTINCT 正文, 正文哈希 FROM 临时表 AS A LEFT JOIN 问题正文表 AS B ON A.正文哈希=B.正文哈希 WHERE A.正文=B.正文 AND (A.正文哈希=0 OR A.正文哈希<>0)
可以HACK掉这个BUG
Access SQL distinct 去重失效问题相关推荐
- list集合用stream流distinct去重失效问题
使用Stream distinct()去重实体类List失效问题 注意:这里用的是 filter实现 根据某个属性对实体list去重 思路: 1.创建用于接受临时数据的list. 2.在filter中 ...
- 使用Stream distinct()去重失效问题
使用Stream distinct()去重实体类List失效问题 注意:这里用的是 filter实现 根据某个属性对实体list去重 思路: 1.创建用于接受临时数据的list. 2.在filter中 ...
- Database之SQLSever:SQL命令实现四则运算、desc降序、like模糊查询、distinct去重、MAX/MIN/SUM/AVG/COUNT/GROUP/having等案例之详细攻略
Database之SQLSever:SQL命令实现四则运算.desc降序.like模糊查询.distinct去重.MAX/MIN/SUM/AVG/COUNT/GROUP/having等案例之详细攻略 ...
- SQL解决去重问题(在线超10min中的人数等)
SQL解决去重问题(在线超10min中的人数等) 内容目录 SQL解决去重问题(在线超10min中的人数等) 一.描述 二.求解 1.思路1 2.思路2 三.牛客的SQL33:直播各科出勤率 一.描述 ...
- php sql统计数量,DedeCMS用SQL语句去重并统计数量
DedeCMS数据库搭建都是傻瓜式的,在做网站SEO优化的操作中,除了自带的标签,还经常会用到一些PHP.SQL语句.对很多WEB新手来说并不是一件容易的事. 会员中心部分经常用到SQL语句统计作者文 ...
- ACCESS SQL语法参考
ACCESS SQL语法参考 一. 基础概念 可以使用的数据类型如下: 1. TEXT:文本型(指定长度时),备注型(不指定长度时): 2. CHAR,NCHAR,VARCHAR, ...
- MySQL学习(8)︱DISTINCT去重与表连接
DISTINCT去重 distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列.在实际的应用中,表中的某一列含有重复值是常见的,如employee表的dept列.如果在查询数据时,希望 ...
- distinct去重用法
distinct去重用法 distinct distinct 语法 : select distinct 字段1 , 字段2- from 表名 distinct 作用 : 去重 , 当字段名有多个时需完 ...
- SQLSever 第二堂课,主要学习内容为top查询前多少行,distinct去重,order by排序,group by分组,最重要子查询...
go update xueshengxinxi set name='你好' where code=1--修改第一行name的名字,改成"你好" update xueshengxin ...
最新文章
- 利用openfiler建立仲裁磁盘
- MySQL------MySQL与SQLServer数据类型的转换
- python a any_Python any() 函数
- ASP.NET防伪令牌与JSON有效载荷
- eclipse怎样在线安装hibernate tools插件并使用
- SpringBoot入门和配置
- Vijos p1484 ISBN号码
- Maven Optional Exclusions使用区别
- PoE交换机的好处,你真的知道吗?
- java integer 包_java之学习基本类型包装类的概述及Integer类的概述和构造方法
- 如何提升Wi-Fi速度 学会更改无线信道
- 如何安装Ruby(Windows)
- vs2008 web创作组件安装失败
- 抽奖系统小程序,多方式真实展示抽奖功能
- (23) 基于深度学习框架的出租车OD需求预测应用对比
- 数据、数据元素和数据项
- .jar是什么文件?(转载)
- Redis + Lua 实现 sorted set 集合保证固定数量的数据,并保留新数据剔除旧数据
- elk笔记20--Analysis
- windows7现实计算机内存不足,win7电脑内存不足怎么解决
热门文章
- python led屏控制_【教程】简易Python上位机之LED控制
- uci2019计算机录取,最新 | 加州大学各分校2019年申请数据公开,录取率再降低,凉到心底!...
- 编程语言 IDE 对比
- 蜗牛学院卿老师:Python中几个比较容易混淆的概念解释
- sqlserver使用distinct插入数据还出现主键冲突
- 【软件开发】使用Electron开发简单的记事本
- 多服务集成CAS实现单点登录
- python 获取excel信息,下载对应图片
- 学习使用亚马逊国际获得AMAZON商品详情 API
- 华为OD机试-优先级打印机