Mysql 仅当列的所有元素都在另一个表中时匹配

Mysql 仅当列的所有元素都在另一个表中时匹配,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我用SQL创建了一个小数据库,它有两个表,分别是产品名称、成分和可用成分: 我想要一个产品的名称,只要它的所有成分都在可用的表中。 对于上一个示例,结果应该是:产品2 而不是产品1,因为我没有在可用的表中的成分b 感谢您的帮助您可以尝试使用left join找出哪些产品没有必要的成分,并通过+过滤至少缺少一种成分的产品进行分组: 您也可以尝试以下方法: WITH TEMP_PRODUCTS AS ( SELECT NAME, COUNT(1) AS NUMBER_OF_INGREDIEN

我用SQL创建了一个小数据库,它有两个表,分别是产品名称、成分和可用成分:

我想要一个产品的名称,只要它的所有成分都在可用的表中。 对于上一个示例,结果应该是:产品2 而不是产品1,因为我没有在可用的表中的成分b

感谢您的帮助

您可以尝试使用left join找出哪些产品没有必要的成分,并通过+过滤至少缺少一种成分的产品进行分组:


您也可以尝试以下方法:

WITH TEMP_PRODUCTS AS
(
    SELECT NAME, COUNT(1) AS NUMBER_OF_INGREDIENTS
      FROM PRODUCT
  GROUP BY PRODUCT
)
SELECT PRD.NAME, COUNT(1) AS NUMBER_OF_AVAILABLE_INGREDIENTS
  FROM PRODUCT PRD
  JOIN TEMP_PRODUCTS TMP ON PRD.NAME = TMP.NAME
 WHERE EXISTS (SELECT 1 
                 FROM INGREDIENT ING
                WHERE ING.INGREDIENT = PRD.INGREDIENT)
 GROUP BY PRD.NAME
 HAVING COUNT(1) = TMP.NUMBER_OF_INGREDIENTS;
select p.Name 
from Products p 
left join Available a on a.Ingredient = p.Ingredient
group by p.Name
having sum(a.Ingredient is null) = 0
WITH TEMP_PRODUCTS AS
(
    SELECT NAME, COUNT(1) AS NUMBER_OF_INGREDIENTS
      FROM PRODUCT
  GROUP BY PRODUCT
)
SELECT PRD.NAME, COUNT(1) AS NUMBER_OF_AVAILABLE_INGREDIENTS
  FROM PRODUCT PRD
  JOIN TEMP_PRODUCTS TMP ON PRD.NAME = TMP.NAME
 WHERE EXISTS (SELECT 1 
                 FROM INGREDIENT ING
                WHERE ING.INGREDIENT = PRD.INGREDIENT)
 GROUP BY PRD.NAME
 HAVING COUNT(1) = TMP.NUMBER_OF_INGREDIENTS;