我試圖找出什麼是最優化的SQL查詢來實現以下。SQL Server最佳匹配查詢與更新(T-SQL)
我有一個包含郵編/ PostalCodes一個表,讓我們假設以下結構:
table_codes:
ID | ZipCode
---------------
1 1234
2 1235
3 456
等。
我的應用程序的用戶填寫了他們需要輸入他們的郵編(郵編)的輪廓。 假設有時,用戶將進入我的表沒有定義一個郵編,我想根據用戶輸入的zip建議最佳匹配。
我使用下面的查詢:
Declare @entered_zipcode varchar(10)
set @entered_zipcode = '23456'
SELECT TOP 1 table_codes.ZipCode
FROM table_codes
where @entered_zipcode LIKE table_codes.ZipCode + '%'
or table_codes.ZipCode + '%' like @entered_zipcode + '%'
ORDER BY table_codes.ZipCode, LEN(table_codes.ZipCode) DESC
基本上,我想以下幾點:
如果@entered_zipcode長於表中的任何郵政編碼,我想以獲得匹配@entered_zipcode的zip表中的最佳前綴如果@entered_zipcode比表中的任何現有代碼都短,我試圖在匹配@entered_zipcode的zip表中獲得最佳前綴
在表中使用它作爲前綴,並得到最佳匹配
此外,我建立一個臨時表結構如下:
#tmpTable
------------------------------------------------------------------------------------
ID | user1_enteredzip | user1_bestmatchzip | user2_enteredzip | user2_bestmatchzip |
------------------------------------------------------------------------------------
1 | 12 | *1234* | 4567 | **456** |
2 |
3 |
4 |
進入拉鍊是用戶輸入一個和* .. *之間的代碼是我查找表中最匹配的代碼,我試圖使用下面的查詢。
查詢時間似乎有點長,這就是爲什麼我在優化它求助:
update #tmpTable
set user1_bestmatchzip = (SELECT TOP 1
zipcode
FROM table_codes
where #tmpTable.user1_enteredzip LIKE table_codes.zipcode + '%'
or table_codes.zipcode + '%' like #tmpTable.user1_enteredzip + '%'
ORDER BY table_codes.zipcode, LEN(table_codes.zipcode) DESC
),
user2_bestmatchzip = (SELECT TOP 1
zipcode
FROM table_codes
where #tmpTable.user2_enteredzip LIKE table_codes.zipcode + '%'
or table_codes.zipcode + '%' like #tmpTable.user2_enteredzip + '%'
ORDER BY table_codes.zipcode, LEN(table_codes.zipcode) DESC
)
from #tmpTable
你爲什麼使用臨時表? – vulkanino 2012-02-29 12:57:19
我正在嘗試使用該臨時表進行一些計算。我想展示的是,我需要在一次更新操作中爲2列獲得最佳匹配zip。在我看來,我的查詢不是最理想的方式。 – mmmmmm 2012-02-29 13:07:25