2011-05-18 102 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