将不同表中的值相乘

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 实体框架

Excel VBA如何填充不同工作表中的值

在 MySQL 中将两个不同表中的值插入到另一个表中

pl/SQL 过程从不同表中的值生成一个表中的值

将我的 Access 表导出到 Excel,但将列中的不同值拆分到不同的工作表中

如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?