oracle中connect by prior语句查询父亲节点的问题

问题描述

已以下的sql文我以某个节点,向上查询它的所有父亲节点:select * from temp start with id = '10' connect by prior parent_id = id可是,现在我以下面的sql文,想取得所有父亲节点的id,却只能获得‘10’这条记录:select id from temp start with id = '10' connect by prior parent_id = id问:1.为什么把“select *" 换成“select id”(即指定查询某个字段)后,只能查询到一条记录? 2.还有如果我是向下查询所有子节点时,指定了某个字段,查询结果却能返回所有的子节点列表? 3.用sql文,我该如何写,能查询到某个节点的所有父亲节点的列表。望赐教!oracle 版本为:10.2.0.2.0 问题补充:dk101 写道

解决方案

我用的Oracle版本是10.2.0.3.0,经过测试,没有发现你说的问题。你上面的SQL就能实现你问题中的第3个需求。
解决方案二:
把你的表结构和表中数据导出成sql,我想在我的环境下试试看。

时间: 2024-10-07 09:22:25

oracle中connect by prior语句查询父亲节点的问题的相关文章

Sql server 数据库中,纯SQL语句查询、执行 单引号问题。

原文:Sql server 数据库中,纯SQL语句查询.执行 单引号问题. 在默认值情况下, select 'abc',Titile from tb_Name;  ---输出内容 是abc: 如果想输出 单引号 'abc,需要使用select '''abc',Titile from tb_Name; ---这里用三个单引号'''abc: select '''abc''',Title from tbName;   输出内容是'abc':两边带有单引号: 谨记:如果字符串包含单引号,则需要在单引号前

oracle中使用SQL递归语句

场景:常见的领导关系树结构,知道某一节点ID,要查出此节点的所有下级(直接下级和间接下级),此时需要使用SQL递归语句. oracle中的递归语句:  start   with     connect   by   prior  . 例子:  pid  id   a   b     a   c       a   e     b   b1     b   b2     c   c1     e   e1     e   e3     d   d1         指定pid=a,选出     a

sqlserver和oracle中对datetime进行条件查询的一点区别小结_数据库其它

首先,看一下sql server,之前我们都通过前台用户选择一个起始时间和一个结束时间(以日为最小单位),然后来作为条件进行查询,如果直接通过"between starttime and endtime"来作为条件的话,发现会自动将"2009-06-17"转化为" 2009-06-17 00:00:00",于是如下查询条件" between '2009-06-16' and '2009-06-17'",只能得到16日的数据,1

mysql中提高Order by语句查询效率的两个思路分析_Mysql

因为可能需要对数据库的记录进行重新排序.在这篇文章中,笔者就谈谈提高Order By语句查询效率的两个思路,以供大家参考. 在MySQL数据库中,Order by语句的使用频率是比较高的.但是众所周知,在使用这个语句时,往往会降低数据查询的性能.因为可能需要对数据库的记录进行重新排序.在这篇文章中,笔者就谈谈提高Order By语句查询效率的两个思路,以供大家参考. 498)this.width=498;" border=0>  一.建议使用一个索引来满足Order By子句. 在条件允许

oracle中Delete与Truncate语句的对比

一.delete语句 (1)有条件删除    语法格式:delete [from]  table_name  [where condition]; 如:删除users表中的userid为'001'的数据:delete from users where userid='001'; (2)无条件删除整个表数据      语法格式:delete  table_name; 如:删除user表中的所有数据:delete users ; 二.Truncate语句 使用Truncate语句是删除表中的所有记录

oracle中not exists对外层查询的影响

又一个类似『12c比10g索引回表消耗增多的问题』的案例,同事在12c中跑的buffer get很高,但是在10g中跑的buffer很低.怀疑是不是12c的优化器有问题. 这个10g的环境和12c的环境,数据量大致一样,只是有很少部分的不同,但是就是这个很少部分不同,造成了not exists中的子查询返回不同的值,进而对外层查询产生不同的影响. 我们来用如下的代码模拟一下. 初始化数据: --10g drop table t1; drop table t2;   create table t1

Oracle中FORALL执行UPDATE语句

在ITPUB上看到一个FORALL执行UPDATE的帖子,觉得有点意思,简单记录一下. 以前研究过FORALL中的INSERT语句,发现语句通过绑定数组的方式,实现了批量绑定,一次运行的方式,从而提高了执行的效率. 但是对于UPDATE语句而言,Oracle的实现和INSERT是不同的: SQL> CREATE TABLE T AS SELECT ROWNUM ID FROM TAB; 表已创建. SQL> SELECT * FROM T;  ID ----------   1   2   3

Oracle中利用数据泵导出查询结果(二) 外部表的卸载功能

还是上一篇中的测试环境: SQL> CREATE TABLE T1 2  (ID NUMBER, NAME VARCHAR2(30)); Table created. SQL> INSERT INTO T1 2  SELECT ROWNUM, TNAME 3  FROM TAB; 66 rows created. SQL> CREATE TABLE T2 2  (ID NUMBER, NAME VARCHAR2(30)); Table created. SQL> INSERT IN

Oracle中利用数据泵导出查询结果(一) 数据泵的QUERY功能

在ITPUB上看到有人提出这个问题,能否利用数据泵导出一个查询结果.事实上数据泵还真的具有这个功能. 建立一个简单的测试环境: SQL> CREATE TABLE T1 2  (ID NUMBER, NAME VARCHAR2(30)); Table created. SQL> INSERT INTO T1 2  SELECT ROWNUM, TNAME 3  FROM TAB; 66 rows created. SQL> CREATE TABLE T2 2  (ID NUMBER, N