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

18 mysql sql

我有一个网站上的项目列表.每个项目都附有几个类别,让我们称这些类别为电影类型.在高级搜索中,我让人们选中他们喜欢的类型的复选框,然后它会显示与任何所选类型相匹配的电影列表.

我有这样的查询:

AND column IN ('5', '8', '9')
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果你选择"动画"和"恐怖",你会得到一堆迪士尼卡通片("动画片")和SAW系列片("恐怖片").

我希望将搜索调整为全包,因此它只返回与所有选定类型匹配的结果,因此将返回标记为"动画"和"恐怖"的项目.

item_id和category_id对存储在单独的表中.因此,对于ID为55的电影,可能有4种类型,因此将有4行,其中item_id = 55,而category_id等于4类别ID.

Joe*_*lli 22

编辑:修改我的答案,以更贴近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
Run Code Online (Sandbox Code Playgroud)


one*_*hen 8

您需要的运算符称为关系分区.

SQL没有直接实现,你必须自己动手.以下文章讨论了一些常见方法:

分裂我们的立场:Joe Celko的关系部门的SQL