我的数据库中有以下3个表,在查询它们以获得所需结果时遇到了一些麻烦。我正在尝试按成分搜索食谱。
SQL Fiddle的以下模式: fiddle
这是我的桌子:配料
+---------------+---------+
| ingredient_id | name |
+---------------+---------+
| 1 | tomato |
| 2 | onion |
| 3 | rice |
| 4 | chicken |
| 5 | beef |
| 6 | noodles |
| 7 | salt |
+---------------+---------+
菜谱
+-----------+------------------+
| recipe_id | name |
+-----------+------------------+
| 1 | tomato goodness |
| 2 | meat deluxe |
| 3 | chicken surprise |
+-----------+------------------+
成分索引
+-----------+---------------+
| recipe_id | ingredient_id |
+-----------+---------------+
| 1 | 1 |
| 1 | 5 |
| 1 | 7 |
| 2 | 5 |
| 2 | 6 |
| 2 | 7 |
| 3 | 4 |
| 3 | 3 |
| 3 | 7 |
+-----------+---------------+
查询仅搜索一种成分的查询效果很好,并输出以下内容:
mysql> select r.recipe_id, r.name
-> from recipes r
-> inner join ingredient_index
-> on i.recipe_id = r.recipe_id
-> where
-> i.ingredient_id = 7;
+-----------+------------------+
| recipe_id | name |
+-----------+------------------+
| 1 | tomato goodness |
| 2 | meat deluxe |
| 3 | chicken surprise |
+-----------+------------------+
但是当使用或用于多种成分时,我们得到了
mysql> select r.name
-> from recipes r
-> inner join ingredient_index i
-> on i.recipe_id = r.recipe_id
-> where i.ingredient_id = 7 or i.ingredient_id = 5;
+------------------+
| name |
+------------------+
| tomato goodness |
| tomato goodness |
| meat deluxe |
| meat deluxe |
| chicken surprise |
+------------------+
设置5行(0.00秒)
并没有使用“和”结果
mysql> select r.name
-> from recipes r
-> inner join ingredient_index i
-> on i.recipe_id = r.recipe_id
-> where i.ingredient_id = 7 and i.ingredient_id = 5;
Empty set (0.00 sec)
任何帮助将非常感激!
由于配方可以使用多种成分,并且您正在寻找使用指定的一种或多种成分DISTINCT
的配方,因此,如果配方使用指定列表中的一种以上成分,则应使用关键字来防止重复结果。另外,您可以使用IN
子句来筛选多个成分ID。
select DISTINCT r.name
from
recipes r
inner join ingredient_index i
on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5);
或者,如果要查找使用列表中指定的所有成分的配方,则可以按配方名称对结果进行分组,并检查记录数是否与列表中的成分数相同。
select r.name
from
recipes r
inner join ingredient_index i
on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5)
GROUP BY r.name
HAVING COUNT(*) = 2
假设不会有重复的记录具有相同的(recipe_id,Ingredient_id)元组(最好通过UNIQUE约束确保)。
问题内容: 默认情况下,Redis配置了16个数据库,编号为0-15。这仅仅是名称间隔的一种形式,还是按数据库隔离会对性能产生影响? 例如,如果我使用默认数据库(0),并且有1000万个键,则最佳实践建议使用 keys 命令按通配符模式查找键效率低下。但是,如果我存储我的主键,也许是8个段键的前4个段,结果导致在单独的数据库(例如数据库3)中的键子集要小得多。Redis是将它们视为较小的一组密钥,
问题内容: 我是使用Redis DB的新手。在阅读了一些文档并浏览了Internet上的一些示例并扫描了stackoverflow.com之后,我可以看到Redis速度非常快,可扩展性很好,但这要付出代价,我们必须考虑一下数据的处理方式在设计时访问它们,以及它们将要执行的操作。我能理解这一点,但对于使用普通的旧SQL这么简单却又缓慢地在数据中搜索感到有些困惑。我可以用KEY命令以一种方式完成此操作
查看其他关于堆栈溢出的问题,有人说这可能是因为valueEventListener的位置不正确,但...不是吗?我正在钻进食物条目/营养条目,但我不知道如何钻进更深。没办法匿名给孩子打电话?我尝试调用childEventListener而不是valueEventListener,其他的都一样,但我再也没有得到那个消息,但我仍然无法检索到我想要的数据。 编辑: 谢谢你到目前为止的帮助。根据下面Has
我有一个基于Spring框架的项目,它只基于Java配置进行初始化。这意味着不需要使用web.xml文件。 您可以在下面的图像中看到项目的结构: Java 7 Spring framework 4.2.1.发布 HibernateORM 5.0.4.final Spring Tool Suite IDE 3.6.2 Maven3 Tomcat 7 数据源 而SystemSettings保存数据库的
发出来攒人品 1.讲述一个项目 2.讲述实习中跟的一个项目 3.有做过ABtest吗,有了解吗 4.有常用的软件吗,最喜欢的一个功能是什么(说了b站,单列视频) B站为什么要上线单列功能,为什么有了双列还要单列 如果你是b站的数据分析师,怎么验证单列功能上线,ABtest核心指标 如果b站用户反馈推的视频太雷同了,作为数据分析师怎么推进解决 5.sql问题,窗口函数是什么 面试评价:框架感薄弱、单
Adding the capability to connect databases to Express apps is just a matter of loading an appropriate Node.js driver for the database in your app. This document briefly explains how to add and use som