带有外键引用的另一个表的值的 PostgreSQL 计算列

Kil*_*ese 10 sql postgresql postgresql-12

我目前正在做一个简单的虚拟项目,以更新我对 SQL 的知识并学习一些新东西:)

我有一个Article包含列的表:

aID, price 
Run Code Online (Sandbox Code Playgroud)

我还有一张桌子Storage

sID, aID, count  
Run Code Online (Sandbox Code Playgroud)

Storage表将 引用aID为外键,计数列表示存储了多少文章。

现在我想value在我的Storage表中添加一列。此列应按 计算Article.price * Storage.count

我在网上搜索后发现你可以计算出这样的列

CREATE TABLE tbl 
(
     int1 INT,
     int2 INT,
     product BIGINT GENERATED ALWAYS AS (int1 * int2) STORED
);
Run Code Online (Sandbox Code Playgroud)

但是我还没有找到如何使用另一个表中的列的示例。

为了在计算中使用引用的 aID 中的价格,我必须做什么?

kli*_*lin 14

您不能根据其他表中的值定义生成的列。根据文档:

生成表达式可以引用表中的其他列,但不能引用其他生成的列。使用的任何函数和运算符都必须是不可变的。不允许引用其他表。

您可以通过在两个表上创建两个触发器来实现预期的行为,但通常创建基于表的视图是一种更简单、更有效的解决方案。