检查另一张表的另一列中的一列的值

时间:2019-09-03 16:16:07

标签: sql sql-server mssql-jdbc

我是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

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

2 个答案:

答案 0 :(得分:0)

假设两个表中都没有重复项,则可以使用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;

答案 1 :(得分:0)

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