首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最好的方法包括和排除?

最好的方法包括和排除?
EN

Database Administration用户
提问于 2018-12-10 08:53:51
回答 2查看 258关注 0票数 0

我有一个大表,其中包含产品I和产品类别I。

我希望选择某个类别ID列表中的产品ID,如果产品ID在另一个类别ID列表中,则完全排除该产品ID。

示例表:

代码语言:javascript
复制
prod_id cat_id
------- ------
1       10
1       11
2       10
2       11
2       12
3       10
3       11

因此,我希望看到所有产品的类别ID 10和11,但如果他们也有类别ID 12,他们必须被排除在外。

我原以为这样能行,但却不行:

代码语言:javascript
复制
SELECT prod_id from products WHERE cat_id IN (10,11) AND NOT IN (12)

这看起来应该很简单,很普通,但我就是不明白。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-12-10 09:01:06

为此,您可以使用不存在

代码语言:javascript
复制
SELECT DISCTINCT
    prod_id
FROM
    products p1
WHERE
    cat_id IN (10, 11)
    AND NOT EXISTS (SELECT 1
                    FROM   products p2
                    WHERE  p1.prod_id = p2.prod_id
                           AND cat_id = 12);
票数 2
EN

Database Administration用户

发布于 2018-12-10 10:57:34

我想看到所有有类别I 10和11的产品。

如果这意味着“至少有一个ID为10或11的记录”:

代码语言:javascript
复制
SELECT prod_id 
FROM products 
GROUP BY prod_id 
HAVING SUM(cat_id IN (10,11)) > 0 
   AND SUM(cat_id = 12) = 0

如果这意味着“至少有一个ID为10的记录和至少一个ID为11的记录”:

代码语言:javascript
复制
SELECT prod_id 
FROM products 
GROUP BY prod_id 
HAVING SUM(cat_id = 10) > 0 
   AND SUM(cat_id = 11) > 0 
   AND SUM(cat_id = 12) = 0
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/224540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档