2016-07-26 30 views
2

我對SQL編程比較陌生,所以請對我輕鬆點。SQL左/內/正常連接vs條件語句的地方

我目前正在編寫一個查詢,它會根據其中一個外部參數的值輸出結果。目前的結構看起來像以下:

@ShowEntireCategory bit = 0 

select distinct 
p.pk 
p.name 
--other columns 
from dbo.Project P 
--bunch of left joins 
where p.Status = 'Open' 
--other conditions 

我想實現的是:當ShowEntireCategory的值是1(通過單選按鈕選擇程序改變),它會顯示所有子類別的記錄,這是內部類別。當它爲0時,它只會顯示選定子類別的記錄,而該類別中的其他子類別則保持不變。

我一直在執行a research上的最佳方法,並且它narrowed downWHERE語句或JOINs

我想知道的是:我應該爲我的場景使用哪些方法?在我的情況下,優先級是優化(最短執行時間)和易於實現。

注:我主要在這裏的目標是不接收準備在這裏使用的代碼(儘管一個例子的代碼片段將受到歡迎),我只是想知道一個更好的方法,這樣我就可以繼續朝着這個方向研究。

預先感謝您!

UPDATE

我已經對數據庫結構進行更多的研究,並設法把相關的問題

一個參數是dbo.Project表,其中包含:PK,CategoryKey(FK) (連接到第二個表中的那個),名稱,描述和所有其他無關的參數。

第二個是dbo.Area表,其中包含:PK,AreaNumber,Name,CategoryKey(FK),IsCategory(1 = is category,0 = not category)。

對不起,但我工作在快節奏的環境中,這是我儘可能多的擠壓。請讓我知道,如果這是不夠的。

+0

這在某種程度上取決於類別和子類別在數據庫中的存儲方式。 – BrandonM

+0

@BrandonM你能澄清一下嗎?我現在可以回答的唯一方法是「1個類別內的4個子類別,每個子類別都有自己的標識符」。 –

+0

你能提供你的表格結構和一些樣品數據嗎?作爲sql語句理想,因此我們可以爲測試設置一個環境 – Philipp

回答

0

由於您提供的信息最好的解決方案是使用WHERE子句和JOINS的組合。您可能需要在第二個表(在更新中描述)上使用WHERE子句來選擇所有屬於類別的行。然後,你會加入這個結果與你的其他表/數據。最後,可以使用CASE子句(詳細信息找到here)來檢查變量並確定是否需要所有類別或僅需要一些類別(可通過附加的WHERE子句處理)。

不確定這完全回答你的問題,但對於更詳細的答案,我們需要更詳細的數據庫模式描述。

+0

對不起,如果不夠詳細。但我會接受你的答案並進行其他研究。 –