我有一张包含Id和鸡尾酒名称的鸡尾酒表(比如1-16范围内的id)。 这些鸡尾酒将由不同成分的任何组合制成。通常每种鸡尾酒由3种或更多种成分制成。
所以我创建了一个包含每种鸡尾酒细节的食谱。例如,id为1的鸡尾酒由成分'id - 1,4,14制成。
现在假设我只有1-7成分(任何随机的7种成分)。我需要取出所有那些由我所拥有的成分制成的鸡尾酒。
我尝试了以下查询,但它返回了所有鸡尾酒,因为每个鸡尾酒至少含有一种成分
SELECT * FROM SB_receipe WHERE ingr_id IN (1,2,3,4,5,6,7) GROUP BY cock_id;
请帮我解决这个问题。
提前致谢
答案 0 :(得分:0)
您想要一个返回使用仅成分的鸡尾酒的查询。
SQL没有关键字ONLY
;你必须用双重否定来表达这一点:
你想要鸡尾酒中列出的没有成分不:
SELECT *
FROM cock
WHERE NOT EXISTS (SELECT 1
FROM SB_recipe
WHERE cock_id = cock.id
AND ingr_id NOT IN (1,2,3,4,5,6,7))
或者,您不想要任何使用列表中不的任何成分的鸡尾酒:
SELECT *
FROM cock
WHERE id NOT IN (SELECT cock_id
FROM SB_recipe
WHERE ingr_id NOT IN (1,2,3,4,5,6,7))