首页 > 解决方案 > 查找仅包含纯素产品的所有食谱

问题描述

我一直试图找到所有纯素食产品的食谱,但到目前为止我只有这个:

SELECT DISTINCT r.*
FROM recipes r INNER JOIN recipe_product rp ON r.id = rp.recipe_id
INNER JOIN products p ON rp.product_id = p.id 
INNER JOIN product_specificdiet ps ON p.id = ps.product_id 
INNER JOIN specificdiets sd ON ps.specific_diet_id = sd.id 
WHERE sd.type = 'VEGAN';

但这个查询给了我所有食谱的素食产品。

不知道我该如何解决。

谢谢!

标签: sqlpostgresql

解决方案


两条规则:

  1. 如果产品的特定饮食之一是“素食主义者”,则该产品是素食主义者。
  2. 一个食谱是纯素的,如果它只包含纯素产品。

换句话说:纯素食谱是NOT EXISTS任何产品都是NOT IN纯素产品的食谱。

select *
from recipes r
where not exists
(
  select null -- non-vegan ingredient
  from recipe_product rp 
  where rp.recipe_id = r.id
  and rp.product_id not in 
  (
    select ps.product_id -- vegan product
    from product_specificdiet ps
    join specificdiets sd ON ps.specific_diet_id = sd.id 
    where sd.type = 'VEGAN'
  )
);

推荐阅读