我有一个数据库,将“市场上可用”的产品和“仍在开发中”的产品存储在两个单独的表(market_product
和dev_product
)中。第三张表(物质)包含一个产品可以制成的所有物质。其他两个表 (marked_product_comp
和dev_product_comp
) 包含产品组成。
我想选择仍在开发中的产品,这些产品由与已上市产品相同的成分制成。
在以下(简化)示例中,查询必须从 dev_product 表中选择 ID = 2 的产品。
CREATE table market_product (ID SERIAL PRIMARY KEY);
CREATE table dev_product (ID SERIAL PRIMARY KEY);
CREATE table substance (ID SERIAL PRIMARY KEY);
CREATE table market_product_comp (prodID SERIAL, substID SERIAL, PRIMARY KEY(prodID,substID));
CREATE table dev_product_comp (devID SERIAL, substID SERIAL, PRIMARY KEY(devID,substID));
INSERT INTO market_product VALUES (1),(2);
INSERT INTO dev_product VALUES (1),(2);
INSERT INTO substance VALUES (1),(2),(3);
INSERT INTO market_product_comp VALUES (1,1),(1,2),(2,3);
INSERT INTO dev_product_comp VALUES (1,2),(2,1),(2,2);
如何编写这样的查询?
更新:
抱歉,我没有注意到我以模棱两可的方式问了我的问题。
我想选择与至少一种已上市产品具有相同成分的仍在开发中的产品。例如,如果有一个dev_product
由物质 {1,2} 制成,而只有一个market_product
由物质 {1,2,3} 制成,我想丢弃它dev_product
,因为它具有不同的成分。我希望这能澄清。