SQL Server 2008R2 Where子句合并两个查询
我有一个查询,可以返回用户有权访问的商店列表。 但是,如果用户是内部员工,他们将自动访问所有门店 在staff表中,这由一个名为Internal的冒号表示,对于is Internal staff,该冒号由1表示,对于非内部staff,该冒号由0表示 目前有一个存储的proc,它获取传入userId的用户的存储列表。存储的过程与下面的类似。所以我想知道如何将查询合并到一个查询中SQL Server 2008R2 Where子句合并两个查询,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一个查询,可以返回用户有权访问的商店列表。 但是,如果用户是内部员工,他们将自动访问所有门店 在staff表中,这由一个名为Internal的冒号表示,对于is Internal staff,该冒号由1表示,对于非内部staff,该冒号由0表示 目前有一个存储的proc,它获取传入userId的用户的存储列表。存储的过程与下面的类似。所以我想知道如何将查询合并到一个查询中 DECLARE @IsInternal bit SELECT @IsInternal = Staff.
DECLARE @IsInternal bit
SELECT @IsInternal = Staff.Internal FROM Staff WHERE Staff.StaffId = @userId
IF(@IsInternal = 0)
BEGIN
SELECT DISTINCT Store.Id, Store.Name,
FROM
Store JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff ON StaffAccess.StaffId= Staff.StaffId
WHERE
StaffAccess.StaffID = @userId
ORDER BY
Store.Name
END
ELSE
BEGIN
SELECT DISTINCT Store.Id,Store.Name,
FROM Store
ORDER BY Store.Name
END
对不起,我应该包括一个员工访问表。如果我在下面运行,它会为非内部员工的用户返回所有商店
SELECT DISTINCT
Store.Id,
Store.Name,
FROM
Store
JOIN StaffAccess ON StaffAccess.StoreID = Store.StoreId
JOIN Staff on Staff.Internal= 1 OR (StaffAccess.StaffID = @userId AND StaffAccess.StaffId = Staff.StaffId)
ORDER BY
Store.Name
您可以使用这个简单的查询来解决您的需求
SELECT DISTINCT
Store.storeid,
Store.Name
FROM
Store JOIN Staff ON Staff.StaffID = @UserId
AND (Staff.Internal = 1 OR
Staff.StoreID = Store.StoreId)
ORDER BY
Store.Name;
Fiddle你能用这种令人困惑的缩进方式阅读你自己的代码吗?我甚至很难看到语句的开始和结束。用一个工作示例改进了答案-