默认IN使用OR基本逻辑。有没有办法将AND基本逻辑与范围一起使用。
例如下面的查询
SELECT ItemId,CategoryID
FROM ItemCategories
WHERE CategoryID IN (4,5)
一个项目可以有多个类别。考虑将以下子集作为项目
|ItemID | CategoryID |
| 1 | 4 |
| 1 | 5 |
| 2 | 4 |
| 2 | 6 |
| 3 | 4 |
| 3 | 5 |
有什么办法可以排除item2吗?由于项目2具有类别6,因此我希望项目必须同时包含4和5。
在这里使用IN子句无济于事。4,5范围也是动态的。
除了IN ()
仅用于限制行集之外,还需要验证per的DISTINCT
集合。为确保某项同时存在于两个类别中,请确认其总和为2(等于中的项目数)。CategoryID
ItemID
COUNT()
IN ()
SELECT
ItemID
FROM ItemCategories
WHERE CategoryID IN (4,5)
GROUP BY ItemID
-- When there are exactly 2 distinct categories
-- you can be certain that they are the 2 requested in the
-- IN () clause
-- The value here must be equal to the number of items in the IN ()
HAVING COUNT(DISTINCT CategoryID) = 2
这是一个演示:http : //sqlfiddle.com/#!6/c9b6c/1
注意:这将提供与您的子句完全相同的集合,仅此IN ()
而已。如果您需要包括那些可能有其他类别不在IN ()
,只是改变它>=
,而不是=
在HAVING
。
HAVING COUNT(DISTINCT CategoryID) >= 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句