检查一列的值是否在另一列中 table

Check if Values of one column in another column of different table

我是 SQL 的新手,对以下情况感到震惊,你们中的任何人都可以帮助解决这个问题。

我想检查产品的成分是否允许在生产线上使用,如果允许,然后是可以生产该产品的生产线名称。

Table 1

ProductionLine       Allergen
  BB1          Tree nut
  BB1          Peanut
  BB1           Milk
  BB1           Wheat
  BB2          Tree nut
  BB2          Peanut
  BB2           Milk 
  BB2           soy
  BB2           Egg

Table 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

如果任何一种成分不允许在任何生产线上使用,那么我们就不能在该生产线上生产产品。

假设 table 中没有重复项,您可以使用 left joingroup 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;

因此,理想情况下,过敏原会有一些您可以加入的 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