我有两个表,一个有一组id,另一个有一组id和一个用户ID,如下所示
客户端
id
-----
3
4
6
7
9
11
商家
ClientId | userId
----------------------
4 2
4 3
9 2
所以基本上我会在@userId中有一个参数,如果@userId = 2,那么该用户可以访问clientId 4和9以及ClientId表中的所有其他参数但是如果说@userId = 5,这个用户无法访问客户端ID 4和9,因为它们在业务表中仅限于客户端2和3。
我的愿望结果是用户可以看到的所有客户端ID的列表(但必须检查如果在业务表中指定了用户ID并且用户ID不是那些用户ID,则该用户ID无法看到查询客户端表时,业务表中的客户端ID。
我很抱歉这太令人困惑了......我很难想出这个......任何指针都会非常感激。
结果应为
假设用户ID = 2
id
---
3
4
6
7
9
11
假设用户ID = 13
id
---
3
6
7
11
因为4和9分别仅限于用户2和3。
答案 0 :(得分:1)
编辑:基于我的重新阅读,我对逻辑的理解是:如果UserID在Business表中,则返回所有客户端,返回业务中不存在的所有客户端除此之外。
IF EXISTS (SELECT ClientId FROM Business WHERE UserId = @userId)
BEGIN
SELECT DISTINCT Id
FROM Client
END
ELSE
BEGIN
SELECT Id
FROM Client
WHERE Id NOT IN
(
SELECT DISTINCT ClientId
FROM Business
)
END
答案 1 :(得分:1)
select DISTINCT ID from Client C
left join Business B on C.ID = B.ClientID
Where B.ClientID is null OR B.UserID = @UserID
答案 2 :(得分:0)
我认为根据我对您问题的解释,这是您想要的查询。
以下是查询功能的简明英文说明:从所有客户端列表中删除受Business表限制的客户端。然后添加用户具有显式访问权限的客户端列表。
declare @userid int =5
(
select Id from Client
except
select clientId from Business
)
union
select clientId from Business where userId = @userId