如何创建引用自身的视图(递归)
Posted
技术标签:
【中文标题】如何创建引用自身的视图(递归)【英文标题】:How to create a view referencing itself (recursive) 【发布时间】:2021-11-20 15:58:48 【问题描述】:我有一个包含以下列的表格:
id | fx | value
我需要创建一个包含以下列的视图:
id | fx | value | amount | updatedFx | updatedValue | updatedAmount
amount = value * fx -> 没问题,工作;
updatedFx = 我从另一个表查询得到的值 -> 没问题,工作;
updatedValue = 我从另一个表查询得到的值 -> 没问题,工作;
updatedAmount = 我需要将此列设为该视图的 updatedFx * updatedValue。
问题是我不想再次查询其他表,就像我对前面的列所做的那样......有没有办法可以引用这个视图,所以我可以做这样的事情。updatedFx * this.updatedValue.
我认为我需要以某种方式使其递归,但我从未真正使用过它,我有点迷茫。
【问题讨论】:
编辑问题以提供带有示例数据的模式作为文本表。 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:您可以命名表表达式中的每一列,然后在主查询中使用它们来计算所需的值。例如:
create view v as
select *, updatedFx * updatedValue as updatedAmount
from (
select
id,
fx,
value,
value * fx as amount,
(my formula) as updateFx,
(my formula) as updateValue
from ...
) x
表表达式生成updatedFx
和updatedValue
列。然后很容易在主查询中使用它们。
【讨论】:
以上是关于如何创建引用自身的视图(递归)的主要内容,如果未能解决你的问题,请参考以下文章