如何连接两个表以在视图中获取输出
Posted
技术标签:
【中文标题】如何连接两个表以在视图中获取输出【英文标题】:How can I join two tables to get an output in a view 【发布时间】:2021-10-25 18:12:21 【问题描述】:我正在尝试通过执行 amount*price_for_each 来计算交易的总价值。
例如,5 个大蒜、8 个面包、1 个鸡肉和 1 个米饭。大蒜(从物品)的价格是25,面包是200,鸡肉是450,米饭是200。5⋅25+8⋅200+1⋅450+1⋅200=2125
CREATE TABLE Items(
price_for_each INT,
name VARCHAR(20),
PRIMARY KEY(name)
);
CREATE TABLE ItemsInTransactions(
name VARCHAR(20),
t_id INT,
amount INT,
FOREIGN KEY(name) references Items(name),
FOREIGN KEY(t_id) references Transactions(t_id)
);
CREATE VIEW TransactionValue AS
SELECT DISTINCT t_id,sum(amount*price_for_each) as value
FROM Items price_for_each, ItemsInTransactions amount
GROUP BY t_id
ORDER BY t_id;
我认为问题出在我看来,输出的值远高于预期,这使我相信存在算术错误(可能相乘太多)。如果有人可以解释一种更好的方法来计算我的输出,我们将不胜感激
enter image description here
【问题讨论】:
此处无需执行 SELECT DISTINCT,您的 GROUP BY 不会返回重复项。 (事实上,这种组合引起了很多人的注意......) 不要破坏你的问题。 请勿以使发布的合理答案无效的方式编辑问题帖子。 help centerMeta Stack Exchange请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。 【参考方案1】:FROM Items price_for_each, ItemsInTransactions amount
是旧的不推荐使用的交叉连接方式(生成 Items 和 ItemsInTransactions 记录的每个组合)。你想要一个内部连接:
FROM ItemsInTransactions amount
INNER JOIN Items price_for_each on price_for_each.name=amount.name
因此,您只需查找相关商品的每件价格。
其他一些 cmets:DISTINCT 在这里是多余的,您的 group by 已经确保每个 t_id 只有一行。表别名应该有助于记录您的查询正在做什么,或者只是允许您更简洁地引用表字段;在这里,您使用的别名描述了您从表中获得的内容,这并不是特别有用。
【讨论】:
【参考方案2】:你正在使用交叉连接,它将结合所有可用的乌鸦
最好总是使用连接
CREATE VIEW TransactionValue AS
SELECT t_id,sum(amount*price_for_each) as value
FROM Items i JOIN ItemsInTransactions iit ON i.name = iit.name
GROUP BY t_id
ORDER BY t_id;
【讨论】:
感谢您的回答,我似乎用这种方法得到了正确的输出。在旁注中,我刚刚编辑了我的问题,但我仍然收到了一个错误。你能发现我在任何地方都有的语法错误吗? 为此,我必须查看原件,但它应该可以工作 dbfiddle.uk/… 如果您的意思是您的查询,那么您写的内容毫无意义,这就是为什么使用我的重写以上是关于如何连接两个表以在视图中获取输出的主要内容,如果未能解决你的问题,请参考以下文章