将不同表中的值相乘
Posted
技术标签:
【中文标题】将不同表中的值相乘【英文标题】:Multiply values from different tables 【发布时间】: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
语法。
【参考方案1】:
所以你需要同时使用一个连接和一个额外的列来指定它,因为成分和数量不是唯一的
我建议
Select
RecipeID
,Amount
,(i.Calories*Amount) as test
from RECIPE_INGREDIENTS r
inner
Join INGREDIENT i
on i.INGREDIENTID = r.INGREDIENTID
这将显示每种配方成分的卡路里
【讨论】:
你也可以添加一个条件来检查卡路里的数量,然后像你一样做 equijoin以上是关于将不同表中的值相乘的主要内容,如果未能解决你的问题,请参考以下文章
如果我想将两个不同表中的 2 个值相乘,我应该在迁移中输入啥? ASP.NET MVC 实体框架