我有一个让我难过的 SQL 查询。基本上,我有一张Recipes
表,其中包含(正如您毫无疑问地猜到的)许多食谱。我有一张Ingredients
桌子,里面有各种配料。我有一张RecipeIngredients
表格,将食谱与它使用的成分联系起来。最后,我有一张PopularIngredients
桌子(它实际上是一个视图,但谁在乎呢?)其中包含人们在厨房里可能拥有的最受欢迎的食材:
CREATE Table Recipes
(
RecipeId int4,
Title varchar(100)
);
CREATE Table Ingredients
(
IngredientId int4,
Name varchar(100)
);
CREATE Table RecipeIngredients
(
RecipeId int4,
IngredientId int4,
Amount int2
);
CREATE Table PopularIngredients
(
IngredientId int4
);
我的目标是列出所有仅使用流行成分的食谱。
可以在此处找到带有示例数据的 SQL Fiddle 。
我正在寻找的是一个将返回Chicken Salad和Pancakes的查询。 Aligator Burgers不会被退回,因为它使用了不受欢迎的成分。
我尝试了一些涉及子选择和ALL
关键字的事情,但没有任何运气。我尝试了各种内部和外部联接,但只要其中至少一种成分很受欢迎,食谱行仍然会出现。任何帮助将非常感激!
我正在使用 Postgres 9.1。