1
我有一個查詢,拿回商店的列表,用戶可以訪問。 如果用戶是內部工作人員,他們可以自動訪問所有商店。的SQL Server 2008R2 WHERE子句合併兩個查詢
在工作人員的表,這是通過一個稱爲內部coloumn其由1表示的用於表示是不是一個內部員工內部員工和0。
目前有一個存儲過程,其獲取存儲爲其中的用戶標識傳入的用戶列表。該存儲過程是類似以下。所以我正在考慮如何將查詢加入到一個查詢中。
DECLARE @IsInternal bit
SELECT @IsInternal = Staff.Internal FROM Staff WHERE Staff.StaffId = @userId
IF(@IsInternal = 0)
BEGIN
SELECT DISTINCT Store.Id, Store.Name,
FROM
Store JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff ON StaffAccess.StaffId= Staff.StaffId
WHERE
StaffAccess.StaffID = @userId
ORDER BY
Store.Name
END
ELSE
BEGIN
SELECT DISTINCT Store.Id,Store.Name,
FROM Store
ORDER BY Store.Name
END
對不起,我應該包括有一個工作人員訪問表。如果我運行它下面帶回所有的店因爲這是不是內部員工
SELECT DISTINCT
Store.Id,
Store.Name,
FROM
Store
JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff on Staff.Internal= 1 OR (StaffAccess.StaffID = @userId AND StaffAccess.StaffId = Staff.StaffId)
ORDER BY
Store.Name
你能用這種令人迷惑的縮進風格閱讀你自己的代碼?我甚至都很難看到這些陳述開始和結束的地方。 – usr 2013-02-28 14:29:35
通過一個工作示例改進了答案 - http://www.sqlfiddle.com/#!3/aafa5/16/0 – 2013-02-28 14:39:55