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.就像- 条件连接之后的行一样,评论甚至没有.
我尝试了上面的查询,但它没有产生任何记录.我怀疑我使用了错误的连接类型,但我被卡住了.
您可以将左连接与需要管理员权限的 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)