0

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

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 OR 2 OR 3 OR 4 的 badge_id 的产品。我想要的是只获得满足所有这些值的产品。我试图做 pb.badge_id=1 和 pb.badge_id=2 等,但这没有返回任何东西——这对我来说很有意义。我还尝试使用 INTERSECT 进行多个查询,但这导致了错误。我猜多个查询是关键,但 UNION 与 IN 基本相同,我不确定在这种情况下如何使用 JOIN。

4

1 回答 1

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
);
于 2012-07-20T19:50:47.883 回答