我有一个大表,其中包含产品I和产品类别I。
我希望选择某个类别ID列表中的产品ID,如果产品ID在另一个类别ID列表中,则完全排除该产品ID。
示例表:
prod_id cat_id
------- ------
1 10
1 11
2 10
2 11
2 12
3 10
3 11因此,我希望看到所有产品的类别ID 10和11,但如果他们也有类别ID 12,他们必须被排除在外。
我原以为这样能行,但却不行:
SELECT prod_id from products WHERE cat_id IN (10,11) AND NOT IN (12)这看起来应该很简单,很普通,但我就是不明白。
发布于 2018-12-10 09:01:06
为此,您可以使用不存在。
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);发布于 2018-12-10 10:57:34
我想看到所有有类别I 10和11的产品。
如果这意味着“至少有一个ID为10或11的记录”:
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的记录”:
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) = 0https://dba.stackexchange.com/questions/224540
复制相似问题