SQL - 选择值等于多个值的项目

时间:2013-08-27 21:07:16

标签: sql sqlite

写这个问题非常困难,但下面是一个表格来说明我的问题。

Id   itemID   categoryID
1      5         10
2      5         16
3      6         10
4      2         10

如果我有这样的表设置,并且我想选择其中categoryID等于10 AND 16的“itemID”,则结果应该是itemID 5.更多的上下文将是用户具有的复选框列表categoryID's,如果他们只选择categoryID 10,则会出现itemID 5,2和6。如果他们也选择了categoryID 16,那么只会出现itemID 5,因为它有类别10和16,其中itemID 2只有类别10。

2 个答案:

答案 0 :(得分:3)

这是“set-within-sets”子查询的示例。我认为解决这些问题的最常用方法是使用聚合和having子句:

select itemID
from t
group by itemId
having sum(case when categoryID = 10 then 1 else 0 end) > 0 and
       sum(case when categoryID = 16 then 1 else 0 end) > 0;

having子句中的每个条件都计算与一个类别匹配的行数。您可以轻松查看这将如何推广更多类别或排除类别。例如,如果你想要10和16而不是22:

select itemID
from t
group by itemId
having sum(case when categoryID = 10 then 1 else 0 end) > 0 and
       sum(case when categoryID = 16 then 1 else 0 end) > 0 and
       sum(case when categoryID = 22 then 1 else 0 end) = 0;

答案 1 :(得分:1)

加入桌子:

select t1.itemID
from mytable t1
join mytable t2 on t2.itemID = t1.itemID
where t1.categoryID = 10
and t2.categoryID = 16;