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

标签 mysql

我有一个食谱应用程序,其中有两个主表,结构如下;

食谱

  • ID
  • 标题

食谱成分

  • ID
  • 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

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

最佳答案

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

像这样:

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

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

关于MySQL 如何返回在另一个表中找到值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42624298/

相关文章:

mysql - 如何在MySQL查询中获取已经预订的客户?

php - "Find nearest location"按邮政编码?

mysql - 过程语法错误

mysql - 使用 Access 或 MySQL 作为后端数据库

mysql - 使用 GUID/UUID 键优化 Innodb 表索引

php - 如何在条件下使用 ARRAY 查询 mysql

php - 请求无法识别上传图片

php - CakePHP 2.0 - 2.1,从 Controller 查询不同的模型

php - 使用 Doctrine 创建一对多的多态关系

java - 无法使用 DriverManager 连接到 mysql 数据库