2011-11-07 81 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