【发布时间】:2021-01-23 06:32:33
【问题描述】:
所以我正在为一个学校项目扩展数据库。它是为一家虚构的公司提供的,该公司向您提供食谱的成分,并提供有关如何制作的说明等(例如 HelloFresh)。
我有两个表要相乘:一个“recipe_ingredients”表和一个“ingredient”表。
CREATE TABLE RECIPE_INGREDIENTS(
RECIPEID INTEGER NOT NULL,
INGREDIENTID INTEGER NOT NULL,
AMOUNT INTEGER
);
CREATE TABLE INGREDIENT(
INGREDIENTID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
.
.
CALORIES INTEGER,
);
我想将成分表中的卡路里与 recipe_ingredients 表中的量相乘,以便能够对卡路里进行 SUM() 并在以后过滤掉超过一定卡路里量的食谱。
我已经尝试过将它们相乘:
SELECT CALORIES, AMOUNT,(CALORIES*AMOUNT) AS TEST
FROM INGREDIENT,
RECIPE_INGREDIENTS;
但正如您可能猜到的那样,我现在将每一个卡路里量乘以我记下的每一个量。
我想要发生的是,只有在 recipe_ingredient 表中列出的带有其 ID 的成分的卡路里乘以我在 recipe_ingredients 表中写入的量。 我该怎么做?
【问题讨论】:
-
今日提示:始终使用现代、明确的
JOIN语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接 -
您必须在RECIPE_INGREDIENTS行和INGREDIENT之间设置匹配条件。现在,即使行中的成分不同,您也可以将任何行附加到任何行。而且您必须定义要在哪个组中计算卡路里(每个食谱?)。
-
请注意,食谱有时会包含两次相同的成分,因此在(食谱、成分)上形成 PK 可能没有意义
-
从不在
FROM子句中使用逗号。 始终使用正确、明确、标准、可读的JOIN语法。
标签: mysql sql join aggregate-functions