【问题标题】:MySQL How to return rows where values are found in another tableMySQL如何返回在另一个表中找到值的行
【发布时间】:2017-03-06 11:21:01
【问题描述】:

我有一个配方应用程序,其中包含两个结构如下的主表;

食谱

  • 身份证
  • 标题

recipe_ingredients

  • 身份证
  • recipe_id
  • 姓名
  • 完整描述

其中 recipe_ingredients 包含链接到一个食谱的多行并保存有关每种单独成分的信息。

我正在尝试在数据库中执行搜索以返回所有包含“鸡肉”和“米饭”作为成分的食谱,但我当前的查询没有返回任何结果,因为我相信它正在搜索鸡肉和米饭的成分是单一成分(行)。

这是我的查询;

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

上面的查询根本没有返回任何结果,但是数据库中有鸡肉和米饭作为配料的食谱。

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

    类似这样的:

    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%')
    )
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多