我正在努力寻找解决以下问题的方法:

我有一个包含两个字段的表,USER_ID和CLIENT_ID。对于每个USER_ID,都有1到n个CLIENT_ID。

假设用户A链接到客户端1,2和3。我想构造一个查询,该查询返回还链接到所有这些客户端的其他用户。它们可能链接到更多客户端,但是它们必须具有到用户A的所有客户端的链接。

示例:用户B具有到客户端1,2,3,4的链接。用户C具有到客户端1,2的链接。然后查询应返回用户B,因为用户B具有到所有用户A的客户端的链接。不应返回用户C,因为他仅具有到用户A的部分客户端的链接,但没有到所有客户端的链接。

这似乎是一个看似简单的问题,但我终生无法提出满足我的约束条件的查询。有经验的SQL专家可以帮助我吗?

最佳答案

进行一些名称和数据类型假设...

DECLARE
  @UserId  int
 ,@ClientCount  int

DECLARE @Clients as table
 (ClientId  int  not null)

--  All clients for the "target" user
INSERT @Clients
 select Clientid
 from MyTable
 where UserId = @userId

--  Track how many there are
SET @ClientCount = @@rowcount

--  List all users that have those clients
SELECT mt.UserId, count(*) HowMany
 from Mytable mt
  inner join @Clients cl
   on cl.ClientId = mt.Clientid
 where UserId <> @UserId
 group by mt.UserId
 having count(*) = @ClientCount


我没有一个表可以对此进行测试,但是它应该很少调试。

10-07 19:40
查看更多