0

我有两张表,一张有一组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。

4

3 回答 3

1

编辑:根据我的重新阅读,我对逻辑的理解是:如果 UserID 在 Business 表中,则返回所有Clients,否则返回 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
于 2012-04-10T17:22:36.353 回答
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
于 2012-04-10T17:30:55.137 回答
0

根据我对您问题的解释,我相信这是您想要的查询。

以下是查询功能的简单英文描述: 从所有客户列表中删除受业务表限制的客户。然后添加用户具有显式访问权限的客户端列表。

declare @userid int =5 
(
 select Id from Client 
 except
 select clientId from Business 
)
union 
select clientId from Business where userId = @userId
于 2012-04-10T17:35:32.353 回答