如何创建引用自身的视图(递归)

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

表表达式生成updatedFxupdatedValue 列。然后很容易在主查询中使用它们。

【讨论】:

以上是关于如何创建引用自身的视图(递归)的主要内容,如果未能解决你的问题,请参考以下文章

SQL递归查询知多少

如何创建在 Python CDK 中引用自身的 API Gateway 资源策略?

如何创建从视图控制器到自身的 segue

SQL:如何从递归查询创建视图?

php之递归调用,递归创建目录

对自身内部列表的递归引用[重复]