假設我有一個(代碼生成的)查詢在多個不同的字段中查找關鍵字。例如,術語University
,South
或Africa
中的任何一個可能位於名稱字段或地址字段或其他字段中。我想找到其中任何一個字段匹配任何這些關鍵字的所有記錄:按匹配的OR條件數對SQL Server記錄進行排序
SELECT *
FROM
Institutions
WHERE
Institutions.name LIKE '%University%' OR
Institutions.address LIKE '%University%' OR
Institutions.name LIKE '%South%' OR
Institutions.address LIKE '%South%' OR
Institutions.name LIKE '%Africa%' OR
Institutions.address LIKE '%Africa%'
然而,這是要拉一切。我想根據符合最可能條件的記錄進行排序。
我認爲這會工作,但看起來很笨重:
SELECT *
FROM
Institutions
WHERE
Institutions.name LIKE '%University%' OR
Institutions.address LIKE '%University%' OR
Institutions.name LIKE '%South%' OR
Institutions.address LIKE '%South%' OR
Institutions.name LIKE '%Africa%' OR
Institutions.address LIKE '%Africa%'
ORDER BY
(
CASE WHEN Institutions.name LIKE '%University%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.address LIKE '%University%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.name LIKE '%South%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.address LIKE '%South%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.name LIKE '%Africa%' THEN 1 ELSE 0 END +
CASE WHEN Institutions.address LIKE '%Africa%' THEN 1 ELSE 0 END
) DESC
有什麼清潔劑?我很喜歡SQL Server特有的解決方案,但純粹的SQL解決方案會很棒。
是的,我想過要做UNIONs + COUNT,但我不認爲這是可讀性方面的改進。我也想知道執行時間;我在考慮對已經過濾的數據使用case語句必須比一堆UNION更快。 –