如果发现一个逗号分隔记录与另一个逗号分隔记录匹配,则获取记录

Posted

技术标签:

【中文标题】如果发现一个逗号分隔记录与另一个逗号分隔记录匹配,则获取记录【英文标题】:Fetch record if found match of one comma separated record with another comma separated records 【发布时间】:2017-08-28 01:09:26 【问题描述】:

我有 3 张桌子

    user service 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

我将以逗号分隔的字符串形式获取服务 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】:

用户服务表能否包含重复项?

如果不行,你可以试试

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

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

【讨论】:

感谢您的帮助..,但抱歉您所说的组数是什么意思? 服务量输入,1,2,3为3,1,3,5,7,9为5

以上是关于如果发现一个逗号分隔记录与另一个逗号分隔记录匹配,则获取记录的主要内容,如果未能解决你的问题,请参考以下文章

数据库表中的逗号分隔列表,替代方案?

CSV (逗号分隔值文件格式)

CSV (逗号分隔值文件格式)

如何将逗号分隔的列值与另一个表作为行连接

字符串 CSV解析 表格 逗号分隔值

如何根据两个逗号分隔值的列中的任何一个值获取记录