我想在SQL Server中編寫存儲過程來查找最佳匹配記錄。給定5個輸入參數@A,@B,@C,@D和@E(所有varchar50),對應於我的表中的5列A,B,C,D和E,我想找到記錄最匹配的列。在所選記錄中不匹配的每列應包含一個空格「'。
舉例來說,如果我有輸入「索尼」,「的PlayStation」,「控制器」,「黑」,「損壞」,我的表包含以下幾列:
"Sony" "Playstation" "Unit" "Black" "Damaged"
"Sony" "Playstation" " " " " " "
它應該返回第二行,因爲2個參數匹配,3個不匹配,有空格。我不想返回第一行,因爲即使4個參數匹配,中間的不匹配,也不是空格。如果它是一個空間,第一排就是贏家。
我的做法
有一些我不能透露各種細節,但我的基本方法(請注意,我是一個新手SQL)是測試大多數具體到最不具體的每一個組合。所以我的查詢會是這個樣子:
-- start with most specific
SELECT * FROM dbo.Items WHERE
A = @A
B = @B
C = @C
D = @D
E = @E
-- if no matches, try next
IF @@ROWCOUNT = 0
SELECT * FROM dbo.Items WHERE
A = @A
B = @B
C = SPACE(1)
D = @D
E = @E
... etc.
對我來說,我只需要真正測試16點的配置,因爲有些排列永遠不會存在。即便如此,這似乎是實現我想要的非常低效的方式。最重要的是,它甚至沒有工作。看起來像空間比較是有問題的,因爲一些自動修剪正在進行。無論如何,我目前的做法似乎效率低下,並且不起作用 - 所以我轉向你尋求幫助。
所以基本上排序最少數量的不正確匹配? – LittleBobbyTables
@LittleBobbyTables,我想返回一個記錄,或者根本沒有。如果記錄被返回,它應該完全匹配除了「」之外的所有內容。 – Dalal
btw,達拉爾,我想你可能有多個比賽,例如,colB中有一個匹配,colC中有一個空格,colB中有空格,colC中有空格。 – Beth