雖然這是一個糟糕的例子,但您會在發佈更多問題時及時趕到那裏。擁有一些更現實的數據(良好的開端)並顯示期望輸出也是好事,而不是基於評論。
無論如何,我不知道有多少「udf」(推斷是用戶定義的字段),我會在每一列上有一個索引。我正在運行從Table1開始的查詢(別名t1),並基於每個相應的「udf」列基於來自table1的值多次連接到table2 ... IN ADDITION中,每個左連接也應用'value1'作爲這就是你正在尋找的東西。 'value1'可能存在於任何可能的table2別名連接中。
WHERE子句是特定於您正在查找的'名稱',而UDF1的以下AND NOT(爲空/爲空)2表意味着我只想要一個記錄,如果其中一個別名返回實例有匹配...如果沒有,則忽略記錄。
最後,COALESCE()的字段選擇,我知道這兩個viaUDF別名之一將有比賽,所以搶列1第一viaUDF1 ......如果可以爲空,從viaUDF2
搶列1
SELECT
coalesce(viaUDF1.Column1, viaUDF2.Column1) as ReturnedKey
from
Table1 T1
left join Table2 viaUDF1
ON T1.Column1 = viaUDF1.udf1
AND viaUDF1.udf1 = 'value1'
left join Table2 viaUDF2
ON T1.Column1 = viaUDF2.udf2
AND viaUDF2.udf2 = 'value1'
where
T1.Column1Name = 'Name1'
AND NOT ( viaUDF1.udf1 IS NULL
OR viaUDF2.udf2 IS NULL)
現在,如果您有10個以上的UDF列,則所有投注均爲關閉性能,您必須以類似的方式左向加入每個實例,因爲您無法基於查詢內聯聯接至表(我見過),而不通過Dynamic-SQL進行。
我們應該優化哪個查詢?你使用的是什麼RDBMS? –
這不是關於查詢優化...它是關於爲規範化表編寫查詢的最佳方式是什麼......數據庫是sql server 2008 – user2324497
是否僅限於將其作爲動態SQL編寫? –