我有一张table叫餐。膳食中含有许多成分(如土豆泥、椰子酱、牛排),每种成分都含有许多过敏原。
我想选择没有任何过敏原列表的食物。
如果我加入三个表,并且不在(。。。过敏原ID列表),这将返回我的膳食,如果它有任何过敏原不在列表中的allegerns排除,这是不正确的:
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,它仍然会从上面的查询返回。我怎么说“把所有不含以下过敏原的饭菜都还给我”
更新澄清示例。
假设我吃了一顿由土豆泥、豌豆和馅饼组成的饭。糖浆里有奶制品,馅饼里有麸质。然后我吃了一顿含有肉类过敏原的牛排(对素食主义者没有好处)。
土豆泥、豌豆、馅饼->奶制品、面筋
牛排,薯条->肉
我想选一种或几种不含奶制品的食物。结果应该是牛排/薯条餐。
如果我加入他们:
select * from meals m
join components c on c.meal_id=c.id
join allergens a on a.component_id=c.id
这会让我对每一种过敏原都有React。如果我加上where子句:
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)
面筋会排成一排,所以不排除土豆泥/豌豆/馅饼。如何排除它?
1条答案
按热度按时间nwlqm0z11#
不存在(…)正是你想要的。
你自己的文字
I want to select the meal(s) which doesn't have any of a given list of allergens.
几乎可以直接转换为sql: