我正在努力寻找解决以下问题的方法:
我有一个包含两个字段的表,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
我没有一个表可以对此进行测试,但是它应该很少调试。