Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >可以进行递归SQL查询吗?

可以进行递归SQL查询吗?
EN

Stack Overflow用户
提问于 2008-09-09 15:08:25
回答 12查看 56.3K关注 0票数 63

我有一个类似于下面的表格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE example (
  id integer primary key,
  name char(200),
  parentid integer,
  value integer);

我可以使用parentid字段将数据排列到树结构中。

这就是我解决不了的问题。给定一个parentid,是否可以编写一条SQL语句,将该parentid下的所有值域相加,并向下递归到树的分支?

SQL:我使用的是posgreSQL,所以我不能使用花哨的MS-特性。在任何情况下,我都希望这个问题被当作一个通用的SQL问题来处理。

顺便说一句,我很高兴在提问的15分钟内得到了6个答案!堆栈溢出!

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-09-10 07:16:57

有几种方法可以在PostgreSQL中完成所需的操作。

如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or replace function example_subtree (integer)
returns setof example as
'declare results record;
         child record;
 begin
  select into results * from example where parent_id = $1;
  if found then
    return next results;
    for child in select id from example
                  where parent_id = $1
      loop
        for temp in select * from example_subtree(child.id)
        loop
          return next temp;
        end loop;
      end loop;
  end if;
  return null;
end;' language 'plpgsql';

select sum(value) as value_sum
  from example_subtree(1234);
票数 12
EN

Stack Overflow用户

发布于 2011-04-18 09:50:16

下面是一个使用公用表表达式的示例脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with recursive sumthis(id, val) as (
    select id, value
    from example
    where id = :selectedid
    union all
    select C.id, C.value
    from sumthis P
    inner join example C on P.id = C.parentid
)
select sum(val) from sumthis

上面的脚本创建了一个名为sumthis的“虚拟”表,其中包含列idval。它被定义为两个selects与union all合并的结果。

第一个select获取根(where id = :selectedid)。

第二,select迭代地跟踪先前结果的子项,直到没有任何结果可返回。

然后,可以像处理普通表一样处理最终结果。在这种情况下,val列被求和。

票数 42
EN

Stack Overflow用户

发布于 2009-02-13 22:39:40

从版本8.4开始,PostgreSQL为使用标准WITH语法的公用表表达式提供了recursive query support

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53108

复制
相关文章
删除或关闭Word中的超链接
最近使用的word老是会把一些文字内容或者标题转换成乱七八糟的格式,看的莫名其妙的,找了好久也不知道什么问题,后来一查才知道是因为这些文字包含超链接,word自动转换了。。。你说是不是莫名其妙。
marsggbo
2019/05/26
2.6K0
Android开发,在Fragment中,隐藏或关闭软键盘(虚拟键盘)的方法
网上可以搜到各种方法,实际测试中,我的开发用机中,仅仅下面这个方法有效,记录一下。
张云飞Vir
2020/03/16
4.3K0
Linux 开启或关闭 SELinux
安全增强型Linux(SELinux)是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制。本文介绍如何开启或关闭SELinux,并且避免系统无法启动的问题。
HoneyMoose
2023/03/31
9.2K0
Linux 开启或关闭 SELinux
JavaScript页面后退或关闭
后退方法history.go(-1)如果无法后退时,会返回一个undefined,利用这一点来判断是否可以后退,不能后退时执行window.close();
全栈程序员站长
2022/09/15
2.3K0
在matplotlib中关闭绘图轴的方法
# Keep making random walks, as long as the program is active
用户7718188
2021/10/08
2.2K0
在bios设置中关闭软驱的方法
bios设置是电脑最基本的设置之一,它是计算机内主板上的一个ROM芯片上的程序,主要功能是为计算机提供最直接的硬件设置和控制。很多人对于BIOS设置并不是很了解,更不要说去怎么设置了,接下来想要介绍的就是关于在bios设置中如何关闭软驱,下面就来看看操作方法吧!
用户8002245
2020/12/25
4.5K0
Kibana关闭停止失败解决办法
ElasticSearch服务异常停止了,这时Kibana提示无法连接到ElasticSearch
程裕强
2022/05/06
8170
怎么在java中关闭一个thread
我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程。那么怎么关闭这个线程呢?
程序那些事
2020/07/08
7970
springboot项目在docker容器中如何优雅关闭
是否所有项目都需要优雅关闭?那也不一定,毕竟所谓的优雅关闭,另一面就意味这关闭得慢,因此项目的优雅关闭得看项目的核心程度,换言之就是看该项目处理的数据是不是核心数据,其实项目的最终本质,是对数据的处理。
lyb-geek
2021/01/15
3K0
springboot项目在docker容器中如何优雅关闭
不想装系统,有没有办法在线体验 Linux?
另外,这次分享还有承上启下的作用。承上是前几天挺受大家欢迎的《Android 手机如何改造成 Linux 服务器?》,启下是想预告:从明天开始,我会在每次发文的次条加入“轻松掌握Linux命令”系列,希望从基础的命令开始,提升 Linux 技术水平,敬请期待!
Python猫
2019/11/12
4.8K0
springboot项目在docker容器中如何优雅关闭
是否所有项目都需要优雅关闭?那也不一定,毕竟所谓的优雅关闭,另一面就意味这关闭得慢,因此项目的优雅关闭得看项目的核心程度,换言之就是看该项目处理的数据是不是核心数据,其实项目的最终本质,是对数据的处理。
lyb-geek
2022/01/06
3K1
springboot项目在docker容器中如何优雅关闭
怎么在windows10中关闭Windows Defender?
1 通过修改注册表,永久禁用Windows Defender1,打开注册表编辑器。#f#
用户3519280
2023/07/06
3130
Selenium Python使用技巧(二)
您可能需要在多种情况下针对不同的浏览器(例如Firefox,Chrome,Internet Explorer,Edge)测试代码。跨不同浏览器测试网站的做法称为自动浏览器测试。要使用Selenium自动化测试执行自动浏览器测试,您应该在单元测试代码或pytest代码中合并对这些浏览器的选择性处理。下面显示了一个代码片段(利用pytest)来处理多个浏览器:
FunTester
2020/02/17
6.4K0
问答 | 有没有什么办法让GPU显存不会溢出?
社长为你推荐来自 AI 研习社问答社区的精华问答。如有你也有问题,欢迎进社区提问。 话不多说,直接上题 问:有没有什么办法让GPU显存不会溢出? 来自社友的回答 ▼▼▼ @巴特莱•芬克: 通过谷歌大部分找到的就是 GPU 显存溢出。然后 加上 CUDA_VISIBLE_DEVICES=1 Environment Variable Syntax Results CUDA_VISIBLE_DEVICES=1 Onl
AI研习社
2018/09/25
1.2K0
在Pyppeteer中正确隐藏window.navigator.webdriver
(文末福利)在我以前的一篇文章:一日一技:如何正确移除Selenium中window.navigator.webdriver的值,我讲到了如何在Selenium启动的Chrome中,通过设置启动参数隐藏 window.navigator.webdriver,驳斥了网上垃圾文章中流传的使用JavaScript注入的弊端。
青南
2019/08/20
3.9K0
在Pyppeteer中正确隐藏window.navigator.webdriver
ubuntu在双系统下开机卡死或关机卡死的解决办法
很多双显卡的笔记本在安装linux发行版的时候可能会出现问题, 笔者的电脑如果不在bios设置中设置屏蔽核显就会开机卡主,所以装系统时必须得屏蔽核显,全局独显,不然进系统就卡死,关机也关不掉, 刚开始也就这么用着,但是慢慢发现一点问题,,就是耗电特别快,
earthchen
2020/09/24
5.8K0
在SAP系统中,如何设置生产订单自动关闭
SAP系统中,若生产订单已经完成,那么是用技术性完成(Technical complete)的方式对订单进行操作,目的是让生产订单对组件的预留进行清除。一般来说,大家普遍采用的是人工去进行生产订单技术关闭的方式,且一般由一个企业的订单计划员负责。
matinal
2020/10/30
2.1K0
在SAP系统中,如何设置生产订单自动关闭
enable命令启动或关闭 shell 内建指令
enable命令可以用于启动或关闭 shell 的内建指令。 如要执行的文件名称与shell内建指令相同,可用enable -n来关闭shell内建指令。若不加-n参数,enable可重新启动关闭的指令。
用户1685462
2021/09/08
4050
chrome webdriver下载_webdriver.chrome()
1、 webdriver文件位置 可以自定义位置,如:d:\selenium环境变量,的文件夹下 也可以放在C:\Program Files (x86)\Google\Chrome\Application的文件夹下 2、系统环境变量PATH 按照图的指示,1->2->3->4->5->6,最后一步直接粘贴你的文件存放路径
全栈程序员站长
2022/11/04
2.3K0
chrome webdriver下载_webdriver.chrome()
点击加载更多

相似问题

有没有办法在量角器中更新范围变量?

10

有没有办法在Silverlight中关闭PopUpWindow?

10

有没有办法在kubelet中关闭逐出?

12

在Internet上通过在webdriver/量角器中传递参数来关闭自动更正?

10

有没有办法使用Selenium WebDriver获取选项卡条中所有选项卡的名称?

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文