【发布时间】:2012-07-20 02:54:00
【问题描述】:
我将简单地展示我正在尝试做的事情,而不是描述。 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)
);
现在这将返回badge_id 为1 OR 2 OR 3 OR 4 的所有产品。我想要只获得满足所有这些值的产品。我试图做 pb.badge_id=1 和 pb.badge_id=2 等,但这什么都没有返回——这对我来说很有意义。我还尝试使用 INTERSECT 进行多个查询,但这导致了错误。我猜多个查询是关键,但 UNION 与 IN 基本相同,我不确定在这种情况下如何使用 JOIN。
【问题讨论】:
-
列匹配所有值实际上没有意义。一条记录可以有多个列,但是,该列只能有一个值。
-
您正在寻找关系除法运算符(不存在),但您可以使用the methods here之一
-
@Ek0nomik - 该列是多对多连接表的一部分,将多个属性链接到多个产品。把它想象成寻找裤子,但我只想要有口袋和货物口袋和纽扣门襟的裤子,而不是归还所有的裤子。 badge_id 与这些属性中的每一个相关
-
@MartinSmith 感谢您的链接。看起来这正是另一篇文章所说的。更好地了解正在发生的事情的好机会
标签: sql inner-join 3nf