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

时间:2017-04-03 08:37:55

标签: mysql group-concat find-in-set

我有3张桌子

  1. user
  2. service
  3. userServices
  4. 用户表

    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
    

    我将获取服务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的子集,则不应返回此记录。

    我已尝试使用用户ID的FIND_IN_SET with GROUP_CONCAT,但它无法正常使用。

1 个答案:

答案 0 :(得分:0)

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

如果没有,您可以尝试

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

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