admin

使用MySQL IN子句作为全包(AND而不是OR)

sql

我在网站上列出了商品。每个项目都有几个附加的类别,我们称这些类别为电影流派。在高级搜索中,我让人们选中他们喜欢的类型的复选框,它弹出与所选任何类型匹配的电影列表。

我有这样的查询:

AND column IN ('5', '8', '9')

这里的问题是,如果您选择“动画”和“恐怖”,则会得到一堆迪斯尼卡通(“动画”)和SAW系列(“恐怖”)。

我想将搜索范围包括在内,因此它只会返回与所有选定流派都匹配的结果,因此将同时标记为“动画”和“恐怖”的项目。

item_id和category_id对存储在单独的表中。因此,对于ID为55的电影,可能会有4种流派,所以会有4行具有item_id =
55,并且category_id等于4个类别ID。


阅读 156

收藏
2021-05-10

共1个答案

admin

编辑 :修改了我的答案,使其更接近OP的编辑问题。

select i.MovieName
    from item i
        inner join ItemCategory ic
            on i.item_id = ic.item_id
    where i.item_id = 55
        and ic.category_id in ('5','8','9')
    group by i.MovieName
    having count(distinct ic.category_id) = 3
2021-05-10