1

我想为具有我的两种成分但我不能使用 AND 这样的食谱选择 recipe_id(我的意思是它为所有列返回 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

这是我的数据库表:在此处输入图像描述

4

2 回答 2

1

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

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

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

一个用于测试的 SQLfiddle

于 2013-05-25T11:49:33.023 回答
1
select *
from vsearch
where recipe_id
in
( select recipe_id from vsearch where name = 'apple'
  intersect
  select recipe_id from vsearch where name = 'olive'
)  
于 2013-05-25T11:52:52.680 回答