AccessSQLdistinct去重失效问题
今天碰到⼀个很奇怪的问题,开发的⼀个考试系统采⽤Access数据库作为题库,⾥⾯建了类似下⾯这样的临时表⽤于导⼊Excel格式的题库:
临时表
ID(⾃增,长整型)专业
(⽂
本)
科⽬
(⽂
本)
题型
(⽂
本)
正⽂
(备
注)
正⽂
哈希
(长
型)
1计算
数学
单选
AAA FF
2计算
数学
select distinct from单选
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 可以HACK掉这个BUG

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。