我现在有三张桌子在忙。配方,配料和配方。
这是典型的多对多的情况,有回报就可以解决这个问题。
然而,我很难得到一个我认为是,相当简单的'和'查询。我要做的是同时寻找多种成分。例如:

SELECT r.recipeTitle AS recipe
FROM Recipe r
WHERE recipeID IN(
    SELECT r.recipeID
    FROM recipeIng il, Ingredient i
    WHERE (il.ingredientID = i.ingredientID)
    AND (il.recipeID = r.recipeID)
    AND (i.ING LIKE '%cheese%' AND i.ING LIKE '%salmon%')

);

当查询运行时,它不输出任何内容。我好像看不出我做错了什么。
任何帮助都将不胜感激。
谢谢。

最佳答案

使用i.ING LIKE '%cheese%' OR i.ING LIKE '%salmon%'而不是AND,并添加GROUP BY r.recipeIDHAVING COUNT(DISTINCT i.ING ) = 2,以确保所选的r.recipeID同时具有ING

SELECT r.recipeTitle AS recipe
FROM Recipe r
WHERE recipeID IN(
    SELECT r.recipeID
    FROM recipeIng il
    INNER JOIN Ingredient i ON il.ingredientID = i.ingredientID
    WHERE il.recipeID = r.recipeID
      AND (i.ING LIKE '%cheese%' OR i.ING LIKE '%salmon%')
    GROUP BY r.recipeID
    HAVING COUNT(DISTINCT i.ING ) = 2
);

SQL Fiddle Demo
因此,如果r.recipeID只有其中一个,那么COUNT(DISTINCT i.ING )将不等于2,因此它将被消除。
HAVING COUNT(DISTINCT i.ING ) = 2将为您提供那些只有奶酪和鲑鱼两个标签的食谱,而没有更多的成分,如果您正在寻找那些至少有两种成分的食谱,请使用`HAVING COUNT(DISTINCT i.ING ) >= 2
这是假设成分作为每行一个值输入字段ING

关于mysql - MySQL“AND”查询未按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14752972/

10-10 13:59
查看更多