sql - 使用 MySQL 中另一个表的多个条件计算不同的记录

标签 sql mysql relational-database

这不是家庭作业。我更改了表和字段的名称,仅供说明之用。我承认我对 MySQL 完全陌生。请在您的回答中考虑这一点。

说明我需要的查询功能的最好方式是这样的:

我有两个表。

一个表与另一个表有 0..1 到 0..n 的关系。

为了简单起见,假设这两个表是 Recipe 和 Ingredient。

Ingredient 表中的一个字段引用 Recipe 表,但可能为空。

举个例子: alt text

我想知道类似以下内容的 SQL:有多少食谱需要“1”的“橄榄”和“2”的“蘑菇”

作为 The Structured Query Language 的新手,我什至不知道要用 google 搜索什么信息。

我是否走在正确的轨道上?:

SELECT COUNT(DISTINCT Recipe.ID) AS Answer FROM Recipe, Ingredient 
  WHERE Ingredient.RecipeID=Recipe.ID AND Ingredient.Name='Olives'
  AND Ingredient.Amount=1 AND Ingredient.Name='Mushrooms'
  AND Ingredient.Amount=2

我意识到这是完全错误的,因为 Name 不能同时是 Olives 和 Mushrooms...但不知道该放什么,因为我需要计算所有包含两者的食谱,但只计算包含两者的所有食谱。

如何为 MySQL 正确编写这样的查询?

最佳答案

你很接近。

尝试类似的东西

SELECT  COUNT(Recipe.ID) Answer
FROM    Recipe INNER JOIN
        Ingredient olives ON olives.RecipeID=Recipe.ID INNER JOIN
        Ingredient mushrooms ON mushrooms.RecipeID=Recipe.ID 
WHERE   olives.Name='Olives'
AND     mushrooms.Name='Mushrooms'
AND     olives.Amount = 1
AND     mushrooms.Amount = 2

您可以两次连接到同一个表,您需要做的就是给表一个合适的 alias .

关于sql - 使用 MySQL 中另一个表的多个条件计算不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4222057/

相关文章:

iphone - 外部化数据源以创建要在 iOS 应用程序上使用的内容

sql - 用时间序列汇总数据填空

php - 使用 foreach() 更新 MySQL 表

php - mysql_num_rows 和条件

mysql - 寻找产品的最早历史条目我应该加入历史/产品表还是在产品表中存储值?

mysql - 如何选择从上一小时到去年之间的行?

mysql - 在mysql中创建带有gmt时区时间戳的数据字段?

mysql - 在 WHERE 子句中将列与自身进行比较

mysql - 关系数据库和 MyIsam

java - 类型 A 和 B 之间的循环依赖