我想为同时具有两种成分的食谱选择recipe_id,但不能像这样使用AND(我的意思是所有列均返回null):

SELECT
   vsearch.ingredient_id,
   vsearch.ingredtypes_id,
   vsearch.name,
   vsearch.recipe_id,
   vsearch.qingred
FROM
   vsearch
WHERE
   vsearch.name = 'olive' AND vsearch.name = 'apple'


vsearch是一个视图,它是:

SELECT
   ingredient.ingredient_id,
   ingredient.ingredtypes_id,
   ingredient.name,
   quantity.recipe_id,
   quantity.ingredient_id AS qingred
FROM
   ingredient ,
   quantity
WHERE
   strong textingredient.ingredient_id = quantity.ingredient_id


这是我的数据库表:

最佳答案

要查找(例如)找到同时包含黄瓜和番茄的食谱ID;

SELECT recipe_id
FROM vsearch
WHERE name = 'cucumber' OR name = 'tomato'
GROUP BY recipe_id
HAVING COUNT(*) = 2


...其中2是必须匹配的成分的名称(在本例中均为两者)

An SQLfiddle to test with

10-08 17:24