一尘不染

结合AND / OR的MySQL多对多条件

sql

我有一个关于mysql查询的问题,这是一个复杂的问题,与Mysql联接查询有关匹配所有标签的多个“标签”(多对多关系)有关?

所以我有经典的MN表架构:

Item
1 | Item1
2 | Item2
...

Category
1 | Category1
2 | Category2
3 | Category3
4 | Category4
...

Item_has_category
1 | 1
...

问题是-如何获得行,其中 具有 Category1 Category2 AND Category3

它用于某些复杂的过滤器,并且某些类别具有特殊的组,该组必须与 AND 一起使用。

我想我必须将HAVING与DISTINCT结合起来 (链接到顶部的另一个问题) ,但是我不确定如何结合。


阅读 132

收藏
2021-05-30

共1个答案

一尘不染

group by将工作:

select  ItemId
from    Item_has_category
group by
        ItemId
having  sum(case when CategoryId = 1 then 1 end) = 1
        or sum(case when CategoryId = 2 then 1 end) = 1
        andsum(case when CategoryId = 3 then 1 end) = 1
2021-05-30