2011-11-07 61 views
1

我有一个查询在这里做它应该是,但我想知道是否有可能使它更有效没有分裂成2个单独的查询。如何改进此访问SQL查询

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中的一个快速表格,在这种情况下我无法改变名称。

回答

2

看起来好像IN总是失败,如果大的AND出现错误。假设[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]都应该编入索引。

+0

感谢您的支持!我很习惯编写IF语句,以至于我不会使用这种方法。我会再玩一次! – Splatgore