检查MySQL集列表中是否存在某些项目

时间:2015-04-18 18:13:07

标签: mysql

我需要检查某些单元格(即SET类型)是否存在某些项目(以逗号分隔)。例如:

id | certifications
1  | a,b,c
2  | b,c
3  | a,c
4  | c
5  | NULL

如果我按a,c进行搜索,则会返回:

  • #1a,b,c包含第一个元素a);
  • #2b,c包含第二个元素c);
  • #3a,c包含第一个元素a);
  • #4c包含第二个元素c)。

如果我按b进行搜索,则会返回:

  • #1a,b,c包含第一个元素b);
  • #2b,c包含第一个元素b);

如果我按a,b,c进行搜索,则会返回除行#5以外的所有内容:

  • #1a,b,c包含第一个元素a);
  • #2b,c包含第二个元素b);
  • #3a,c包含第一个元素a);
  • #4c包含第三个元素c)。

1 个答案:

答案 0 :(得分:0)

只需normalize您的数据并完成它。

基本上,创建一个连接表id_to_certification

id | cert_id
------------
1  | a
1  | b
1  | c
2  | b
2  | c
...

然后您的查询将是:

SELECT id FROM id_to_certification WHERE cert_id IN ("a", "b") GROUP BY id;