2011-05-18 84 views
0

我寫在訪問查詢,這是非常簡單的:DISTINCT判斷崩潰訪問

SELECT fieldName FROM table; 

這工作完全沒有問題,但如果我嘗試下面的查詢訪問不響應和崩潰:

SELECT DISTINCT fieldName FROM table; 

注意:這不是我在數據庫中第一次使用distinct子句。

可能注意到:它查詢該表是另一個查詢的形式和 -

SELECT * from otherTable where otherField IN 
             (SELECT otherField2 from otherTable2); 

沒有人有任何線索,這是什麼原因?

+0

對不起,讓我澄清 - 我想能夠編輯從我原來的帖子中的最後一個查詢返回的記錄,但只是希望獨立查詢的結果。 – Zack 2011-05-19 21:38:52

+0

爲什麼你覺得你需要重新使用可編輯查詢?爲什麼不直接使用JOIN而不是IN編寫第二個不可編輯的查詢來獲得相同的結果呢? – 2011-05-22 00:19:27

回答

1

這可能是您的數據庫損壞。嘗試一個緊湊的&修復。

+0

你能解釋一下怎麼做嗎? – Zack 2011-05-19 18:01:44

+1

Nvm - 我在尋找之前發表評論道歉。這根本不難找到。 – Zack 2011-05-19 18:03:16

+0

這實際上是一個非常精明的建議,因爲損壞的索引可能會導致這種不一致。 – 2011-05-22 00:18:48

1

IN關鍵字會降低訪問速度,特別是查詢您正在嘗試執行的查詢。你可以嘗試,而不是加入,例如:

SELECT * FROM otherTable LEFT JOIN otherTable2 ON otherTable.otherField = otherTable2.otherField2

+0

我的連接唯一的問題是,它不會允許我編輯查詢中拉出的記錄。有沒有辦法解決這個問題? – Zack 2011-05-19 18:01:24

+0

事實上,在這裏IN應該不成問題,因爲Jet/ACE將在兩邊都使用索引。根據我的經驗,這不是問題所在,但您絕對可以打開Jet SHOWPLAN並查找確切信息。但我同意在可能的情況下,JOIN更可取。 – 2011-05-22 00:17:25

0

A JOIN將只返回相同的記錄作爲您的原始查詢,如果otherTable2只包含0或者其他表中的每條父記錄都有1條記錄。您可以在所有情況下實現相同的結果

SELECT DISTINCT otherTable.* 
FROM otherTable INNER JOIN otherTable2 
    ON otherTable.otherField = otherTable2.otherField2 

這將返回一個可編輯的記錄集。我懷疑它的性能與IN查詢不同。如果IN查詢在緊湊的&修復之後仍然崩潰,那麼可以嘗試一些操作。

+1

SELECT DISTINCT永遠不可編輯。 -1 – 2011-05-22 00:18:03