我正在写的查询需要一点帮助。我把它分解成最简单的形式。我的表结构示例如下所示(为清楚起见,我对其进行了更改):
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
一切正常。但是,我刚刚被告知,用户的所有直接下属都应该可以看到用户创建的文档和用户拥有的文档。
给定我定义的示例表结构,我将如何用查询来表达这一点?
非常感谢