如何改进此Access SQL查询

如何改进此Access SQL查询,sql,ms-access,Sql,Ms Access,我这里有一个查询,它完成了它应该做的事情,但是我想知道是否有可能在不将它拆分为两个单独的查询的情况下提高它的效率 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]<>"Undev

我这里有一个查询,它完成了它应该做的事情,但是我想知道是否有可能在不将它拆分为两个单独的查询的情况下提高它的效率

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);
这只是我正在玩的一个简单的访问查询。如果我将子查询作为“createtable”查询运行,然后对新表运行第二个查询以获取所需的数据,那么很容易获得所需的结果

我创建查询/子查询是出于好奇,想看看它是如何工作的,但是它非常慢,我想知道是否可以做些什么来提高效率。在这里创建临时列是正确的做法吗?我想不出另一种方法来做这件事


有什么想法吗?我知道列标题非常糟糕,但这只是我导入Access中的一个快速表,在这种情况下,我无法更改名称。

看起来,如果大值出现错误,输入总是失败。假设[Full UO Code]永远不是空字符串,这可能是错误的。但如果我是对的,你可以把基本上无法优化的IIF去掉,放到一个


如果到目前为止这是正确的,您可以将子查询重写为自联接。这可能更快,也可能不会更快。无论如何,[建筑]和[功能名称\u使用类型]都应该编入索引。

谢谢!我已经习惯于写IF语句,以至于我没有想到使用这种方法。我要再演一场!
/* ... IN */
(SELECT [Business Entity] FROM HPP_MD 
 WHERE 
 [Building]="Site" AND 
   ([Function Name_Usage Type]<>"Property" AND 
   [Function Name_Usage Type]<>"Undeveloped Land")