我有一個存儲過程,它需要輸入兩個表類型(每個表只包含一個ID列)。這些過濾器需要應用於存儲過程中的主查詢。我是通過將這兩個表類型參數加入主查詢來完成的。類似下面:有條件地添加/刪除SQL語句中的聯接
SELECT
<cols>
FROM
<table> t join @tableVar1 v1 on t.c1 = v1.c1
join @tableVar2 v2 on t.c2 = v2.c2
現在我需要改變這樣的,如果表變量包含任何行,它應該返回回整套程序。所以如果@ tableVar1有0行,我不會加入主查詢。
我想做的事情,我正在努力與具有相同的查詢有條件地不做連接,如果該變量有0行。我可以爲每個組合添加if語句,但這意味着我必須編寫4個查詢。查詢很複雜,恐怕之後所做的更改可能會不同步。
那麼是否有可能在同一個查詢中對性能產生最小影響?感謝你的幫助。
嘗試將INNER JOIN更改爲左外連接: LEFT OUTER JOIN @ tablevar1 v1 ON t.c1 = v1.c1 – Rishabh 2014-10-01 03:48:37
爲什麼不在if-else下使用兩個單獨的查詢?這種方式沒有性能影響,它會更乾淨。 – Jayachandran 2014-10-01 03:50:46
@Jayachandran我目前正在使用不同的查詢,但問題是有兩個變量有4個組合,並且可能會有一個更多的過濾器會使它成爲8個組合,並且它變成了維護地獄。 – v1p3r 2014-10-01 04:03:09