我有一个问题,我无法解决。
问题在于sql查询我需要从类别中选择项目,这些项目也应该在另一个类别中。 基本上它是这样的:
select * from items where category_id in (1,2,3,4,5) and category_id = 6
当然上述声明无效,我试图:
select * from items where category_id in (1,2,3,4,5,6)
GROUP BY item_id HAVING COUNT(DISTINCT category_id) > 1
但是这也会给我存在多个类别的项目,例如类别1,类别2和类别3中存在的项目,但不包括类别6中的项目。
有关如何解决此问题的任何建议。
答案 0 :(得分:0)
一种方法是通过计算与您的每个条件匹配的组成记录的数量并结合适当的逻辑操作来过滤结果组:
SELECT item_id
FROM items
WHERE category_id IN (1,2,3,4,5,6) -- only for performance, if indexed
GROUP BY item_id
HAVING SUM(category_id IN (1,2,3,4,5))
AND SUM(category_id = 6)
另一种方法是使用自联接,联接的每一侧根据不同的标准过滤组:
SELECT item_id
FROM items a JOIN items b USING (item_id)
WHERE a.category_id IN (1,2,3,4,5)
AND b.category_id = 6
GROUP BY item_id