从子查询中保存价值并在以后重用它?
Posted
技术标签:
【中文标题】从子查询中保存价值并在以后重用它?【英文标题】: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;
【参考方案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,我只想写一次子查询。我今天会检查你的代码。感谢您的帮助!以上是关于从子查询中保存价值并在以后重用它?的主要内容,如果未能解决你的问题,请参考以下文章