我对SQL很陌生,并在下面的场景中进行了说明,请任何一个人在这方面提供帮助。
我想要检查产品的成分是否允许在生产线上,如果允许,那么生产线名称的产品,它可以生产。
表1
ProductionLine Allergen
BB1 Tree nut
BB1 Peanut
BB1 Milk
BB1 Wheat
BB2 Tree nut
BB2 Peanut
BB2 Milk
BB2 soy
BB2 Egg表2
Product Ingredients
P1 Tree nut
P1 Peanut
P1 Milk
P1 soy在这里,产品P1可以在BB2生产线上生产,因为所有的成分都允许在BB2变应原清单上。因此,我希望将结果集设置为
预期结果
Product Ingredients ProductionLine
P1 Tree nut BB2
P1 Peanut BB2
P1 Milk BB2
P1 soy BB2如果任何一种原料都不允许在任何生产线上使用,那么我们就不能在该生产线上生产产品。
发布于 2019-09-03 16:30:06
假设两个表中都没有重复项,则可以使用left join和group by。关键是计算匹配的数量,并确保它与配料的总数相匹配。
select t2.product, t1.productionline
from (select t2.*,
count(*) over (partition by product) as num_products
from table2 t2
) t2 left join
table1 t1
on t2.ingredient = t1.allergen
group by t2.product, t1.productionline, t2.num_products
having count(t1.ingredient) = num_products;发布于 2019-09-03 16:32:53
所以,理想情况下,Allergen应该有一些ID,您可以加入到其中,这样您就可以执行以下操作
SELECT Table2.Product, Table2.Ingredients, Table1.ProductionLine FROM Table1.AllergenId JOIN Table2.IngredientAllergenId 如果您的表不是这样构造的,那么它们可能应该是这样的。但如果你不能改变它,你就能做到。
SELECT Table2.Product, Table2.Ingredients, Table1.ProductionLine FROM Table1.Allergen JOIN Table2.Allergen https://stackoverflow.com/questions/57775400
复制相似问题