我将简单地展示我正在尝试做的事情,而不是描述。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。