如何改进此Access SQL查询

时间:2011-11-07 02:49:05

标签: sql ms-access

我在这里有一个查询可以完成预期,但我想知道是否有可能使其更高效而不用将其分成2个单独的查询。

SELECT [Full UO Code] FROM HPP_MD
WHERE LEFT([Full UO Code],5) In 
(SELECT IIF([Building]="Site" AND 
([Function Name_Usage Type]<>"Property" AND 
[Function Name_Usage Type]<>"Undeveloped Land"),[Business Entity],"") As Test 
FROM HPP_MD);

这只是我正在玩的一个简单的Access查询。如果我将子查询作为“创建表”查询运行,然后针对该新表运行第二个查询以获取所需数据,则很容易得到我需要的结果。

我出于好奇创建了查询/子查询,看看它是如何工作的,但它很慢,我想知道是否可以采取任何措施来提高效率。创建一个临时列是正确的事情吗?我无法想到另一种方法。

有什么想法?我知道列标题非常糟糕,但这只是我导入Access的一个快速表格,在这种情况下我不会因为更改名称而感到烦恼。

1 个答案:

答案 0 :(得分:2)

如果大AND出现错误,看起来IN总是会失败。假设[Full UO Code]永远不是空字符串,这可能是错误的。但如果我是正确的,你可以将基本上无法优化的IIF移除到WHERE

/* ... IN */
(SELECT [Business Entity] FROM HPP_MD 
 WHERE 
 [Building]="Site" AND 
   ([Function Name_Usage Type]<>"Property" AND 
   [Function Name_Usage Type]<>"Undeveloped Land")

如果到目前为止这是正确的,您可以将子查询重写为自联接。这可能会也可能不会更快。无论如何,[Building][Function Name_Usage Type]都应编入索引。