我不能很好地解釋我正在嘗試做什麼,但是。TSQL - 查詢列表A和B的列,左連接,保持主表
我有一個表A,它是我的表B的一系列參數,包含每個用戶及其權限。
Woot?
表用戶
用戶ID,名稱
表參數
ParamterId,參數名稱
表權限
PermissionId,參數標識,用戶ID,X,Y,Z(X, Y,Z都是布爾值)
SO。我想要的是;所有參數的列表,每個用戶擁有或不擁有其權限。
它會是這樣的;
SELECT
p.ParameterName,
pm.X,
pm.Y,
pm.Z
FROM Parameters p
LEFT JOIN Permissions pm ON pm.PermissionId = p.Id
AND (pm.UserId IS NULL OR pm.UserId = @UserId)
基本上,我希望所有的參數,我需要知道,如果我提供的用戶與否,對於每一個特定參數的許可。
LEFT JOIN沒有工作對我非常好,它不會讓我所有的參數時,用戶不必爲它的權限...
BUT。
我設法做到這一點;
SELECT
p.ParameterName,
(SELECT X FROM Permissions WHERE ParameterId = p.Id And UserId = @UserId) [X]
-- *repeat logic for Y and Z*
FROM Parameters p
第二個查詢工作得很好,但是,我知道這不是很好的質量和性能。我不知道我的桌子結構是否是我能做的最好的。
我想過每行做它而不是在一行中做所有的權限類型。
有點像。
實際 - 權限
PermissionId,參數標識,用戶ID,X,Y,Z。(XYZ位/布爾值)
東西我首先想到 - 權限 PermissionId,參數標識,用戶ID,類型
(類型應該是一個包含X,Y和Z的枚舉)。但是使用這個邏輯我會遇到更多的問題,所有的權限一起查詢,所以,我認爲如果我把它們放在一個單獨的行中可能會更好。
我是否設法解釋我的問題以及我需要什麼?
有什麼我可以做或第二個查詢工作得很好嗎?
感謝。
先看看LEFT JOIN錯了,它應該LEFT JOIN權限下午pm.ParameterId = p.Id –