首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql选择没有任何一组值的所有行

Postgresql选择没有任何一组值的所有行
EN

Stack Overflow用户
提问于 2020-06-22 09:20:10
回答 1查看 38关注 0票数 0

我有一张叫吃饭的桌子。膳食有许多成分(如泥、肉、牛排),每种成分都含有has_many过敏原。

我想选择没有任何给定的过敏原清单的食物。

如果我加入这三个表,并做allergen_id不在(.(过敏原if列表),如果食物中有任何不能排除在寓言中的变应原,它就会退还给我,这是不对的:

代码语言:javascript
复制
select * from meals m 
join components c on c.meal_id=c.id 
join allergens a on a.component_id=c.id
where a.id not in (1,2,3,4)

如果一顿饭有过敏原15和7,它仍将从上述查询返回。我怎么说“把没有下列任何过敏原的所有食物还给我”?

更新澄清示例。

假设我吃了一顿由马什,豌豆和派组成的晚餐。里面有奶制品,派里有面筋。然后我吃了一顿牛排饭,里面有肉过敏原(对素食者没有好处)。

土豆泥,豌豆,派->乳制品,面筋

牛排,薯条,->肉

我想选择没有奶制品的一餐或一餐。结果应该是只吃牛排/薯片。

如果我加入他们所有人:

代码语言:javascript
复制
select * from meals m 
join components c on c.meal_id=c.id 
join allergens a on a.component_id=c.id

这会让我对每一种过敏原都感到厌烦。因此,如果我添加where子句:

代码语言:javascript
复制
select * from meals m 
join components c on c.meal_id=c.id 
join allergens a on a.component_id=c.id
where a.id not in (2)

会有一排面筋,所以麦汁/豌豆/派粉不会被排除在外。我怎么排除它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-22 09:57:57

不存在(.)做你想做的事。

您自己的文本I want to select the meal(s) which doesn't have any of a given list of allergens.几乎可以直接转换为SQL:

代码语言:javascript
复制
 -- How do I say:
 -- Return me all meals
select * from meals m
where not exists ( --  which doesn't have 
        select * 
        from  components c  -- any of the following allergens
        join allergens a on a.component_id = c.id AND a.id in (1,2,3,4)
        where c.meal_id = m.id
        );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62511144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档