Sql 在联接表中搜索多个条件
这似乎很简单,但出于某种原因,我无法让它做我想要的 我有一个食谱网站,我想能够搜索食谱的基础上,如果他们是否包含多种成分。我有两张桌子,一张是所有的食谱信息,另一张是配料。这是我到目前为止所拥有的,但它没有检索到任何记录。任何帮助都将不胜感激。谢谢Sql 在联接表中搜索多个条件,sql,Sql,这似乎很简单,但出于某种原因,我无法让它做我想要的 我有一个食谱网站,我想能够搜索食谱的基础上,如果他们是否包含多种成分。我有两张桌子,一张是所有的食谱信息,另一张是配料。这是我到目前为止所拥有的,但它没有检索到任何记录。任何帮助都将不胜感激。谢谢 SELECT recipe.ID, recipe.Title, recipe.Photo FROM ingredient LEFT JOIN recipe ON ingredient.Recipe_ID = recipe.ID WHERE (in
SELECT recipe.ID, recipe.Title, recipe.Photo FROM ingredient
LEFT JOIN recipe ON ingredient.Recipe_ID = recipe.ID
WHERE (ingredient.Description = 'egg' AND ingredient.Description = 'sugar' AND ingredient.Description = 'salt')
GROUP BY recipe.ID
您没有得到任何结果,因为
WHERE
子句中的和使其成为不可能的条件,由于没有一行描述同时是所有这些值,因此没有结果,因为where
子句中的和使其成为不可能的条件,因为没有一行描述同时是所有这些值
select recipe.ID, recipe.Title, recipe.Photo
from(
select recipe.ID, recipe.Title, recipe.Photo
,count(ingredient.description) as num_ingredients
from ingredient left join recipe
on ingredient.recipe_id=recipe.ID
group by 1,2,3
)ingred_count
where num_ingredients>=2;
如果你想看看含有多种成分的食谱,那就可以了。否则,如果您想要每个配方的配料数量,则使用子查询
如果你想看看含有多种成分的食谱,那就可以了。否则,如果您想要每个配方的配料数量,请执行子查询。您的配料表似乎包含配方ID
。这实际上会使这个查询变得非常简单,因为您所需要做的就是查看哪个Recipe\u ID
发生在多行中
SELECT I.recipe_id
FROM ingredient I
WHERE COUNT(I.description) > 0
GROUP BY I.recipe_id
将给出所有此类食谱的ID。如果你想要的不仅仅是ID,你需要加入
SELECT R.*
FROM ingredient I
INNER JOIN recipe R on I.recipe_id = R.id
WHERE COUNT(I.description) > 0
GROUP BY I.recipe_id
我强烈建议您查看一个多对多表,您可以将其命名为配方\u to\u配料
。这样你就有了一个表recipe
,一个表component
和一个表recipe\u-to\u-component
,其中将有配方id/成分id对(可能还有数量?)你的成分表似乎包含配方id
。这实际上会使这个查询变得非常简单,因为您所需要做的就是查看哪个Recipe\u ID
发生在多行中
SELECT I.recipe_id
FROM ingredient I
WHERE COUNT(I.description) > 0
GROUP BY I.recipe_id
将给出所有此类食谱的ID。如果你想要的不仅仅是ID,你需要加入
SELECT R.*
FROM ingredient I
INNER JOIN recipe R on I.recipe_id = R.id
WHERE COUNT(I.description) > 0
GROUP BY I.recipe_id
我强烈建议您查看一个多对多表,您可以将其命名为配方\u to\u配料
。这样,您就有了一个表配方
、一个表配料
和一个表配方到配料
,其中将有配方id/配料id对(可能还有数量?)如果您想要所有配方都至少包含这3种配料,请尝试:
SELECT recipe.ID, recipe.Title, recipe.Photo FROM recipe
WHERE recipe.ID in (
SELECT Recipe_ID
FROM ingredient
WHERE ingredient.Description in ('egg', 'sugar', 'salt')
HAVING count(distinct ingredient.Description) = 3
GROUP BY Recipe_ID
)
如果您希望所有食谱至少包含这3种成分,请尝试:
SELECT recipe.ID, recipe.Title, recipe.Photo FROM recipe
WHERE recipe.ID in (
SELECT Recipe_ID
FROM ingredient
WHERE ingredient.Description in ('egg', 'sugar', 'salt')
HAVING count(distinct ingredient.Description) = 3
GROUP BY Recipe_ID
)
谷歌“关系部门”。谷歌“关系部门”。这是可行的。非常感谢您抽出时间回答@乔恩:太好了。你可以通过勾选旁边的复选框来“接受”这个答案。这是可行的。非常感谢您抽出时间回答@乔恩:太好了。你可以通过勾选旁边的复选框来“接受”这个答案。