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