如何找到仅属于一种配方的成分?

时间:2019-10-01 12:02:51

标签: sql

INGREDIENT(ingredient-id,name,price-ounce)
RECIPE(recipe-id,name,country,time)
USES(rid,iid,quantity)

rid是配方ID的外键,而iid是外键Ingredient_id

我如何找到仅属于一种配方的成分?

我已经尝试了几种方法,但是不确定如何处理。

2 个答案:

答案 0 :(得分:2)

提取恰好在一种配方(HAVING COUNT(*) = 1)中出现的成分:

SELECT ingredient_id,
       name
FROM   (SELECT   ingredient.ingredient_id,
                 ingredient.name,
                 COUNT(*)
        FROM     ingredient
        JOIN     uses
          ON     ingredient.ingredient_id = uses.iid
        GROUP BY ingredient.ingredient_id,
                 ingredient.name
        HAVING   COUNT(*) = 1
       )

答案 1 :(得分:1)

我只使用聚合:

1.41421, 
11.4018, 
34.4093, 
0

如果要使用名称(而不是ID),则可以加入配料表。

注意:select u.iid from uses u group by u.iid having count(distinct u.rid) = 1; 允许同一配方多次使用一种成分。如果不允许这样做,请改用count(distinct)