使用连接进行条件过滤

Dan*_*iel 6 t-sql sql-server join

我在具有单个参数的存储过程中具有与以下类似的查询:

SELECT
    ID,
    DepartmentID,
    FileName
FROM
    Document
-- conditional join from here
JOIN
    AllowedDepartmentList ON DepartmentID = AllowedDepartmentList.ID 
                          AND @IsAdmin = 'false'
Run Code Online (Sandbox Code Playgroud)

该参数@IsAdmin与数据类型位.

我使用的两个表是Document表(参见上面查询中的结构),并且AllowedDepartmentList包含单个int列.

我使用此查询来过滤Document带有连接的表的返回结果.我不使用该WHERE DepartmentID IN()子句,因为AllowedDepartmentList可以长达600-700个项目(IN()在可能的1M记录表中处理性能太高)所以我使用连接进行过滤,但过滤应该只执行,如果@IsAdmin参数是false.就像- 条件连接之后的行一样,评论甚至没有.

我尝试了上面的查询,但它没有产生任何记录.我怀疑我使用了错误的连接类型,但我被卡住了.

Mad*_*sen 4

您可以将左连接与需要管理员权限的 where 或连接上的匹配项结合使用

SELECT
    ID,
    DepartmentID,
    FileName
FROM
    Document
-- conditional join from here
LEFT JOIN
    AllowedDepartmentList ON DepartmentID = AllowedDepartmentList.ID 
WHERE
    @IsAdmin = 'true' OR AllowedDepartmentList.ID IS NOT NULL
Run Code Online (Sandbox Code Playgroud)