在具有单个参数的存储过程中,我在本质上类似于以下查询:

SELECT
    ID,
    DepartmentID,
    FileName
FROM
    Document
-- conditional join from here
JOIN
    AllowedDepartmentList ON DepartmentID = AllowedDepartmentList.ID
                          AND @IsAdmin = 'false'

参数是@IsAdmin,数据类型为bit。

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

我使用此查询通过join过滤Document表的返回结果。我不使用WHERE DepartmentID IN()子句,因为AllowedDepartmentList可以长达600-700个项目(对于IN()来说,它在潜在的1M记录表中无法以良好的性能进行处理)
因此,我使用联接进行过滤,但是只有在@IsAdmin参数为false时,过滤才应执行。就像从这里开始的条件连接后面的行一样,甚至都没有。

我尝试了上面的查询,但没有任何记录。我怀疑我使用了错误的联接类型,但是我被卡住了。

最佳答案

您可以将左联接与需要管理员权限或联接匹配的组合使用

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

10-04 23:19