大家好,我有一个有两列trial_id
,category_id
的表
我正在附加图像,以便使其更加清晰。
当我想要具有trial_id
的category_id
记录时,我可以运行类似的查询
SELECT * FROM `trial_category` WHERE category_id IN ( 259, 260 )
您可以将其赋予
trial_id
与这两个category_id
关联我的问题是,现在我想要与这两个
trial_id
完全匹配的category_id
我该怎么办?意味着如果您仅注意到
trial_id
73既有259又有260 category_id
,那么我的结果应该只有73。谢谢
最佳答案
这是“集内集”子查询的示例。这是将group by
与having
子句一起使用的解决方案:
SELECT trial_id
FROM trial_category
group by trial_id
having sum(case when category_id = 259 then 1 else 0 end) > 0 and
sum(case when category_id = 260 then 1 else 0 end) > 0;
当其中一行具有特定类别时,满足
having
子句中的每个条件。您可以看到如何轻松地将其推广到更多类别。甚至情况是259,但不是260和261。如果恰好需要这两个类别,则可以通过添加以下子句来筛选没有其他类别的行:
sum(case when category_id not in (259, 260) then 1 else 0 end) = 0;
IN(259,260)