大家好,我有一个有两列trial_idcategory_id的表

我正在附加图像,以便使其更加清晰。

当我想要具有trial_idcategory_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 byhaving子句一起使用的解决方案:

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)

09-27 10:39