带有AND逻辑的SQL IN子句

尼拉夫

默认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 ()仅用于限制行集之外,还需要验证perDISTINCT集合为确保某项同时存在于两个类别中,请确认其总和为2(等于中的项目数)。CategoryIDItemIDCOUNT()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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL日期逻辑子句

来自分类Dev

带有SUMPRODUCT的IF子句

来自分类Dev

带有ID的android sql where子句

来自分类Dev

在带有SQL插值的子句中

来自分类Dev

带有普通SQL的JOOQ EXISTS子句

来自分类Dev

带有not not子句的SQL select查询

来自分类Dev

Foreach带有where子句?

来自分类Dev

带有if语句的Where子句

来自分类Dev

带有numpy的Where子句

来自分类Dev

带有多个 OR 的 Where 子句

来自分类Dev

AND / OR where子句逻辑混乱

来自分类Dev

Python的`if`子句的逻辑规则

来自分类Dev

具有逻辑功能的GROUP BY子句

来自分类Dev

如何在jOOQ中生成带有LIMIT子句但没有OFFSET子句的SQL语句?

来自分类Dev

在带有SQL注入的mysql中的子句中

来自分类Dev

SQL Server中带有条件的子句

来自分类Dev

SQL查询按数据分组,但带有order by子句

来自分类Dev

参数化的IReports,带有LIKE子句的SQL语句

来自分类Dev

带有NOT IN子句的SQL DELETE查询不起作用

来自分类Dev

功能中带有where子句的sql语句

来自分类Dev

SQL Server带有空列的where子句

来自分类Dev

如何正确使用带有COUNT列的SQL HAVING子句?

来自分类Dev

在SQL查询中使用带有Union子句的group / order by

来自分类Dev

带有LINQ查询子查询的not in子句的SQL查询

来自分类Dev

带有IN语句的SQL中的动态Where子句

来自分类Dev

在SQL Server中带有在子句之间的案例声明

来自分类Dev

带有左联接的SQL子句导致找不到列

来自分类Dev

SQL Server上带有IN的WHERE子句中的CASE语法

来自分类Dev

SQL查询中带有总和的Where子句