我正在摸索着找出以下问题的解决方案:
我有一个包含两个字段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大师是否可以帮助我?
答案 0 :(得分:3)
制作许多名称和数据类型假设...
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
我没有一个表来测试这个,但它应该很少调试。
答案 1 :(得分:2)
SELECT uc.user_id, u.username, COUNT(*) as client_count
FROM user u
INNER JOIN user_client uc
USING (user_id)
WHERE uc.client_id IN (
SELECT client_id
FROM user_client
WHERE user_id = {ID of user A}
)
GROUP BY uc.user_id, u.username
HAVING client_count = (
SELECT COUNT(*)
FROM user_client
WHERE user_id = {ID of user A}
)
未经测试且可能是MySQL特定的,但这样的事情应该有效。