今天碰到一个很奇怪的问题,开发的一个考试系统采用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 去重失效问题相关推荐

  1. list集合用stream流distinct去重失效问题

    使用Stream distinct()去重实体类List失效问题 注意:这里用的是 filter实现 根据某个属性对实体list去重 思路: 1.创建用于接受临时数据的list. 2.在filter中 ...

  2. 使用Stream distinct()去重失效问题

    使用Stream distinct()去重实体类List失效问题 注意:这里用的是 filter实现 根据某个属性对实体list去重 思路: 1.创建用于接受临时数据的list. 2.在filter中 ...

  3. 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等案例之详细攻略 ...

  4. SQL解决去重问题(在线超10min中的人数等)

    SQL解决去重问题(在线超10min中的人数等) 内容目录 SQL解决去重问题(在线超10min中的人数等) 一.描述 二.求解 1.思路1 2.思路2 三.牛客的SQL33:直播各科出勤率 一.描述 ...

  5. php sql统计数量,DedeCMS用SQL语句去重并统计数量

    DedeCMS数据库搭建都是傻瓜式的,在做网站SEO优化的操作中,除了自带的标签,还经常会用到一些PHP.SQL语句.对很多WEB新手来说并不是一件容易的事. 会员中心部分经常用到SQL语句统计作者文 ...

  6. ACCESS SQL语法参考

    ACCESS SQL语法参考 一. 基础概念 可以使用的数据类型如下: 1.      TEXT:文本型(指定长度时),备注型(不指定长度时): 2.      CHAR,NCHAR,VARCHAR, ...

  7. MySQL学习(8)︱DISTINCT去重与表连接

    DISTINCT去重 distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列.在实际的应用中,表中的某一列含有重复值是常见的,如employee表的dept列.如果在查询数据时,希望 ...

  8. distinct去重用法

    distinct去重用法 distinct distinct 语法 : select distinct 字段1 , 字段2- from 表名 distinct 作用 : 去重 , 当字段名有多个时需完 ...

  9. SQLSever 第二堂课,主要学习内容为top查询前多少行,distinct去重,order by排序,group by分组,最重要子查询...

    go update xueshengxinxi set name='你好' where code=1--修改第一行name的名字,改成"你好" update xueshengxin ...

最新文章

  1. 利用openfiler建立仲裁磁盘
  2. MySQL------MySQL与SQLServer数据类型的转换
  3. python a any_Python any() 函数
  4. ASP.NET防伪令牌与JSON有效载荷
  5. eclipse怎样在线安装hibernate tools插件并使用
  6. SpringBoot入门和配置
  7. Vijos p1484 ISBN号码
  8. Maven Optional Exclusions使用区别
  9. PoE交换机的好处,你真的知道吗?
  10. java integer 包_java之学习基本类型包装类的概述及Integer类的概述和构造方法
  11. 如何提升Wi-Fi速度 学会更改无线信道
  12. 如何安装Ruby(Windows)
  13. vs2008 web创作组件安装失败
  14. 抽奖系统小程序,多方式真实展示抽奖功能
  15. (23) 基于深度学习框架的出租车OD需求预测应用对比
  16. 数据、数据元素和数据项
  17. .jar是什么文件?(转载)
  18. Redis + Lua 实现 sorted set 集合保证固定数量的数据,并保留新数据剔除旧数据
  19. elk笔记20--Analysis
  20. windows7现实计算机内存不足,win7电脑内存不足怎么解决

热门文章

  1. python led屏控制_【教程】简易Python上位机之LED控制
  2. uci2019计算机录取,最新 | 加州大学各分校2019年申请数据公开,录取率再降低,凉到心底!...
  3. 编程语言 IDE 对比
  4. 蜗牛学院卿老师:Python中几个比较容易混淆的概念解释
  5. sqlserver使用distinct插入数据还出现主键冲突
  6. 【软件开发】使用Electron开发简单的记事本
  7. 多服务集成CAS实现单点登录
  8. python 获取excel信息,下载对应图片
  9. 学习使用亚马逊国际获得AMAZON商品详情 API
  10. 华为OD机试-优先级打印机