MySQL如何返回在另一个表中找到值的行

时间:2017-03-06 11:21:02

标签: mysql

我有一个配方应用程序,其中包含两个主要表格,如下所示;

配方

  • ID
  • 标题

recipe_ingredients

  • ID
  • recipe_id
  • 名称
  • full_description

其中recipe_ingredients包含链接到配方的多行,并保存有关每种成分的信息。

我试图在数据库上执行搜索,以返回包含' chicken'和米饭'作为一种成分,但我目前的查询没有结果,因为我相信它正在寻找鸡肉和大米是单一成分(排)的成分。

这是我的疑问;

SELECT r.* FROM recipe AS r
INNER JOIN recipe_ingredient AS ri ON ri.recipe_id = r.id
WHERE (ri.name LIKE '%chicken%' OR ri.full_description LIKE '%chicken%') AND (ri.name LIKE '%rice%' OR ri.full_description LIKE '%rice%')
GROUP BY r.id

上述查询根本没有返回任何结果,但数据库中有以鸡肉和大米为原料的配方。

1 个答案:

答案 0 :(得分:2)

一旦食谱中的成分既不是米饭也不是鸡肉,这种情况就会失败;你必须使用一个内部查询来查看每个食谱中是否存在给定的成分。

这样的事情:

SELECT r.* FROM recipe AS r
WHERE EXISTS (
    SELECT * 
    FROM recipe_ingredient ri
    WHERE ri.recipe_id = r.id
    AND (ri.name LIKE '%chicken%' OR ri.full_description LIKE '%chicken%')
)
AND EXISTS (
    SELECT * 
    FROM recipe_ingredient ri
    WHERE ri.recipe_id = r.id
    AND (ri.name LIKE '%rice%' OR ri.full_description LIKE '%rice%')
)

这不是很优雅,但你明白我的意思。