如果发现一条逗号分隔记录与另一条逗号分隔记录匹配,则获取记录
Fetch record if found match of one comma separated record with another comma separated records
我有3张桌子
user
service
userServices
用户Table
Id | Name | Status
------------------------
1 | User1 | y
2 | User2 | y
3 | User3 | y
4 | User4 | y
服务Table
Id | ServiceName | Status
------------------------
1 | Service1 | y
2 | Service2 | y
3 | Service3 | y
4 | Service4 | y
用户服务Table
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
我将以逗号分隔的字符串形式获取服务 ID,例如 1,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 但它不起作用。
用户服务Table能否包含重复项?
如果不行,可以试试
SELECT UserId FROM userServices
WHERE serviceId IN (1,2,3)
GROUP BY UserId HAVING COUNT(*) >= 3
(将 1,2,3
替换为输入,将 3
替换为输入中的组数,或者您甚至可以在 SQL 本身中计算它)
我有3张桌子
user
service
userServices
用户Table
Id | Name | Status
------------------------
1 | User1 | y
2 | User2 | y
3 | User3 | y
4 | User4 | y
服务Table
Id | ServiceName | Status
------------------------
1 | Service1 | y
2 | Service2 | y
3 | Service3 | y
4 | Service4 | y
用户服务Table
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
我将以逗号分隔的字符串形式获取服务 ID,例如 1,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 但它不起作用。
用户服务Table能否包含重复项?
如果不行,可以试试
SELECT UserId FROM userServices
WHERE serviceId IN (1,2,3)
GROUP BY UserId HAVING COUNT(*) >= 3
(将 1,2,3
替换为输入,将 3
替换为输入中的组数,或者您甚至可以在 SQL 本身中计算它)