1
我需要一些幫助來查詢我正在寫的查詢。我把它分解成最簡單的形式。 的我的表結構的例子如下所示(我已經改變了它的清晰度):連接表上的子查詢
Users
UserId int -- PK Identity
Username varchar(30)
DirectReports
DirectReportId int -- PK Identity
UserId int -- FK to Users.UserId
ManagerId -- FK to Users.UserId
Documents
DocumentId int -- PK Identity
DocumentOwner int -- FK to Users.UserId
DocumentName varchar(30)
CreatedBy int -- FK to Users.UserId
CreatedDate datetime
我需要做的,是讓誰創建了一個文檔的用戶才能夠看到自己的文檔。 於是我就用:
CREATE PROCEDURE GetUsersDocuments
@UserId INT = null
AS
BEGIN
SET NOCOUNT ON;
Select * from Documents D
Where D.CreatedBy = ISNULL(@UserId, D.CreatedBy)
END
它返回一個特定的用戶創建的所有文檔。
但是,模型的業務規則也規定另一個用戶可以代表用戶創建文檔。因此,用戶需要知道自己創建的所有記錄以及他們擁有的所有文檔的可見性:
CREATE PROCEDURE GetUsersDocuments
@UserId INT = null
AS
BEGIN
SET NOCOUNT ON;
Select * from Documents D
Where D.CreatedBy = ISNULL(@UserId, D.CreatedBy)
OR D.DocumentOwner = ISNULL(@UserId, D.DocumentOwner)
END
所有工作都很好。但是,我剛剛被告知,用戶的所有直接報告都應該能夠看到由用戶創建的兩個文檔以及用戶擁有的文檔。
鑑於我已經定義了示例表結構,我將如何用查詢來表達這個結構?
非常感謝