SQL的等效IN运算符作为AND而不是OR?

时间:2012-07-20 19:41:13

标签: sql inner-join 3nf

不是描述,而是简单地展示我正在尝试做的事情。 3NF中的3个表。 product_badges是连接表。 (存在子查询是必要的。)

SELECT * FROM shop_products WHERE EXISTS ( // this line cannot change
    SELECT * FROM product_badges as pb 
    WHERE pb.product_id=shop_products.id
    AND pb.badge_id IN (1,2,3,4)
);

现在这将返回所有具有1或2或3或4的badge_id的产品。我想要的是仅获取满足所有这些值的产品。我试着做pb.badge_id = 1和pb.badge_id = 2等,但这没有任何回报 - 这对我来说是有意义的。我还尝试使用INTERSECT进行多次查询但导致错误。我猜多个查询是关键,但UNION与IN基本相同,我不确定如何在这种情况下使用JOIN。

1 个答案:

答案 0 :(得分:3)

请尝试以下方法(假设恰好有4种不同的bagde_id):

SELECT * FROM shop_products WHERE EXISTS ( // this line cannot change
    SELECT pb.product_id, count(distinct pb.bagde_id) FROM product_badges as pb 
    WHERE pb.product_id=shop_products.id
    AND pb.badge_id IN (1,2,3,4)
    GROUP BY pb.product_id
    HAVING count(distinct pb.bagde_id) = 4
);