如果找到一个逗号分隔记录与另一个逗号分隔记录匹配,则提取记录



>我有 3 张桌子

  1. user
  2. service
  3. userServices

用户表

Id  |  Name   | Status
------------------------
1   |  User1  | y
2   |  User2  | y
3   |  User3  | y
4   |  User4  | y

服务表

Id  |  ServiceName   | Status
------------------------
1   |  Service1      | y
2   |  Service2      | y
3   |  Service3      | y
4   |  Service4      | y

用户服务表

Id  |  UserId   | ServiceId   | Status
-----------------------------------------
1   |  1        | 1           | y
2   |  1        | 3           | y
3   |  1        | 2           | y
4   |  1        | 4           | y
5   |  2        | 2           | y
6   |  2        | 3           | y
7   |  2        | 4           | y
8   |  3        | 1           | y
9   |  3        | 3           | y
10  |  3        | 4           | y
11  |  3        | 2           | y

我将获得逗号分隔字符串的服务 ID1,2,3作为输入,我需要检查哪个用户提供此所有服务。

例如; 用户 1 提供服务 1,3,2,4,1,2,3 是 1,3,2,4 的子集,因此应返回此记录。

用户 2 提供服务 2,3,4,因此 1,2,3 不是 2、3、4 的子集,则不应返回此记录。

我尝试使用FIND_IN_SET with GROUP_CONCAT用户 ID

但不起作用。

用户服务表可以包含重复项吗?

如果没有,您可以尝试

SELECT UserId FROM userServices 
WHERE serviceId IN (1,2,3)
GROUP BY UserId HAVING COUNT(*) >= 3

(1,2,3替换为输入,3替换为输入中的组数,或者您甚至可以在SQL本身中计算它)

相关内容

  • 没有找到相关文章

最新更新