PostgreSQL计算列,其中包含外键引用的另一个表的值

时间:2019-11-08 19:38:34

标签: sql postgresql postgresql-12

我目前正在研究一个简单的虚拟项目,以刷新我对SQL的了解并学习一些新知识:)

我有一个表Article,其中的列为:

aID, price 

我还有另一个表Storage

sID, aID, count  

Storage表引用aID作为外键,而count列说明存储了多少文章。

现在,我想向value表中添加列Storage。此列应由Article.price * Storage.count计算。

搜索网络后,我发现您可以计算出这样的列

CREATE TABLE tbl 
(
     int1 INT,
     int2 INT,
     product BIGINT GENERATED ALWAYS AS (int1 * int2) STORED
);

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

要在计算中使用引用的aID中的价格,我该怎么办?

1 个答案:

答案 0 :(得分:3)

您不能基于其他表中的值定义生成的列。每个the documentation:

  

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

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