我有表recipes2ingredients
(id, recipe_id, ingredient_id)
和2种成分,例如1,2。我需要得到所有recipe_id
where is ingredient_id = 1 and ingredient_id = 2
答案 0 :(得分:1)
假设它将在DB服务器上使用;你可以使用。
select distinct r2i1.recipe_id from recipes2ingredients r2i1
join recipes2ingredients r2i2
on r2i1.recipe_id = r2i2.recipe_id
where r2i1.ingredient_id = 1
and r2i2.ingredient_id = 2;
答案 1 :(得分:0)
使用拥有和计数以及在哪里可以找到具有这两种成分的所有食谱。
SELECT recipe_ID, count(Distinct ingredient_id)
FROM recipes2ingredients
WHERE ingredient_ID in (1,2)
GROUP BY recipe_id
HAVING count(Distinct ingredient_id) = 2
使用了一个独特的计数,所以如果一个成分被列出不止一次,我们就不会得到误报。
where子句仅限于那些具有一种或多种成分和having子句的食谱,确保我们只有2
这种方法的优点是允许where子句和having count都是在运行时提供的变量,而不必更改查询结构。