Access SQL distinct 去重失效問題

今天碰到一個很奇怪的問題,開發的一個考試系統採用Access數據庫作爲題庫,裏面建了類似下面這樣的臨時表用於導入Excel格式的題庫:

臨時表
ID(自增,長整型)專業(文本)科目(文本)題型(文本)正文(備註)正文哈希(長整型)
1計算機數學單選題AAAFF
2計算機數學單選題BBBCC
3信息工程數學單選題AAAFF
4信息工程數學單選題CCCDD

先在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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章