我抓我的头找出解决以下问题:

我有两个字段,USER_ID和CLIENT_ID的表。对于每个USER_ID有1到n CLIENT_IDs。

让我们说,用户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

我没有表测试这个打击,但它应该很少调试工作。

其他提示

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的具体的,但这样的事情应该工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top