大家好,我有一个表,其中有两列 trial_id
, category_id
我附上图片以便它变得更清晰。
当我想要包含 category_id
的 trial_id
记录时,我可以运行类似
SELECT * FROM `trial_category` WHERE category_id IN ( 259, 260 )
你可以设置 trial_id
将这两个 category_id
关联起来
我的问题是,现在我想要与这两个 category_id
完全匹配的 trial_id
我该怎么做?
意味着如果你注意到只有 trial_id
73 有 259 和 260 category_id
那么我的结果应该只有 73。
谢谢
最佳答案
这是一个“set-within-sets”子查询的例子。这是一个使用 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;
在 ( 259, 260 )
关于php - 从转换表中选择完全匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445914/