gpt4 book ai didi

SQL IN 子句中包含 AND 逻辑

转载 作者:行者123 更新时间:2023-12-02 23:18:45 26 4
gpt4 key购买 nike

默认 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 ()仅限制行集,您需要验证 DISTINCT一套CategoryIDItemID 。要确保某个项目同时存在于两个类别中,请验证其聚合 COUNT()是 2(等于 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

关于SQL IN 子句中包含 AND 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com