2017-02-28 22 views
0

我有一個存儲過程,可以根據爲特定類型提供參數的用戶檢索結果。用戶也可以提供一個空參數,在這種情況下返回所有結果並忽略過濾器。SQL LEFT OUTER JOIN在可空列和合並的使用

這裏是存儲過程:

CREATE PROCEDURE GetHousesByType 
(
    @HouseTypeParameter INT = NULL, 
) 
AS 
BEGIN 

SELECT HouseId, HouseType, HouseName 
FROM HouseTable MAIN 
LEFT JOIN HouseTypes HOTP ON MAIN.HouseType = HOTP.HouseTypeId 
WHERE MAIN.HouseType = COALESCE(@HouseTypeParameter, MAIN.HouseType) 

的問題是,有時候,我參加在HouseType列可以爲空。

我想返回所有列,即使HouseType欄爲空,但只有當@HouseTypeParameter IS NULL


香港專業教育學院嘗試添加下列到查詢

WHERE MAIN.HouseType = COALESCE(HouseType, MAIN.HouseType) OR MAIN.HouseType IS NULL 

的條件但是,無論用戶將HouseType參數設置爲什麼,這都會得到空值。

任何幫助將是偉大的!

+0

哪個表的'HouseType'列可以是'NULL'? – Lamak

+0

抱歉,拉馬克好點。不適當更新問題 –

回答

1

除非我失去了一些東西,這where子句應該爲你工作:

WHERE MAIN.HouseType = COALESCE(@HouseTypeParameter, MAIN.HouseType) 
OR (MAIN.HouseType IS NULL AND @HouseTypeParameter IS NULL) 
1

可以的情況下,通過一個虛構的值HouseTypeNULL

WHERE COALESCE(MAIN.HouseType,-1) = COALESCE(@HouseTypeParameter, MAIN.HouseType, -1); 

,或者乾脆利用一個OR

WHERE MAIN.HouseType = @HouseTypeParameter 
OR @HouseTypeParameter IS NULL; 
0

我想這是你w螞蟻

SELECT HouseId, HouseType, HouseName 
FROM HouseTable MAIN 
LEFT JOIN HouseTypes HOTP ON MAIN.HouseType = HOTP.HouseType 
WHERE MAIN.HouseType = @HouseTypeParameter 
    OR (MAIN.HouseType IS NULL AND @HouseTypeParameter IS NULL);