【问题标题】:Save value from sub query and reuse it later?从子查询中保存价值并在以后重用它?
【发布时间】:2019-01-28 11:51:55
【问题描述】:

如何多次使用子查询的结果?有没有办法命名该结果并在其他地方使用它?我知道 xyz as ... 但这似乎不起作用?

我找到了this,想要更具体的内容吗?

损坏代码示例:

with g_surf as (select surface_area from countries where name like 'Germa%')
select abs(surface_area - g_surf) from countries;

使用整个子查询的工作代码:

select abs(surface_area - (select surface_area from
    countries where name like 'Germa%')) from countries;

【问题讨论】:

  • 称为CTE(公用表表达式)。也许如果你发布你的尝试,我们可以告诉你为什么没有成功。
  • PostgreSQL table variable的可能重复
  • 您成为会员的时间已经足够长,知道我们需要更多,对吧?代码、尝试、错误等。此外,如果您链​​接某些内容,请包含/引用重要位,以便当链接失效时,问题不会。 - 编辑:并可能使用pg_fetch_all 并将子查询结果保存为独立查询?
  • @rkeet 可以吗?
  • g_surf 是 CTE,即它就像一个表格,而不是一个字段。因此:with g_surf as (select surface_area from countries where name like 'Germa%') select abs(surface_area) from g_surf;当然,如果你的countries表中有g_surf字段,你可以写with myCTE as (select surface_area, g_surf from countries where name like 'Germa%') select abs(surface_area - g_surf) from myCTE;

标签: postgresql


【解决方案1】:

只是为了将问题标记为已解决:
g_surf,在您的示例中,是 CTE(通用 表格 表达式),即它充当表格,而不是字段。

with g_surf as (select surface_area from countries where name like 'Germa%')
select abs(surface_area) from g_surf; 

当然,如果您的countries 表中有g_surf 字段,您可以这样写:

with myCTE as (select surface_area, g_surf from countries where name like 'Germa%')
select abs(surface_area - g_surf) from myCTE;

更多关于 CTE here.

【讨论】:

  • 非常感谢。我会尽快检查一下。
  • 等等,在你的第一个例子中,没有减法? (所以它真的做到了我打算做的事情)现在在你的第二个例子中,surface_area 如何知道它来自国家,而 g_surf 如何知道它来自 myCTE?
  • 是因为你的破代码有点奇怪……你写with g_surf as (select surface_area from countries where name like 'Germa%')的时候很粗略的说:创建一个临时表g_surf,其唯一的字段是surface_area(没有g_surf 列)。但是,select abs(surface_area - g_surf) from countries 建议的g_surf 部分是表countries 中的列标识符。我只是不知道什么假设是正确的。如果第二个查询有效,我想这就是您要查找的内容。
  • 好吧,那我来解释一下。 “工作代码”示例是我的目标。我想选择、排序并在表面积的差异上使用 where,我只想写一次子查询。我今天会检查你的代码。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多