争怎路由网/应用软件/内容

ORACLE树结构查询--connect by语法详

应用软件2024-04-10 阅读
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

CONNECT BY 语法置信自己能够从网上找到许多例子,在这里就不多说了。来描绘一下我碰到的问题。

表(fnd_flex_value)中的数据是这样的:

TYPE_ID    PARENT_VALUE   CHILD_VALUE

139048      2701                      270101

139048      270101                27010101

139058      2701                       270101

139058      270101                   27010101

施行如下语句:

select * from fnd_flex_value ffv

where type_id=139048

start with child_value=270101

connect by prior child_value=ffv.parent_value;

施行后果为:

TYPE_ID    PARENT_VALUE   CHILD_VALUE

139048      2701                      270101

139048      270101                  27010101

139048      270101                  27010101

最初一条记载重复了两次,咱们想获得的后果应当只需前两条,那么第三条是怎么获得的呢,经由钻研,集体觉得能够是因为如下的缘由(假如不准确,请自己改正,呵呵):

在这段SQL的施行的时分,先施行了CONNECT BY,G最初才施行WHERE前提。

那么轮回获得的后果为:

第一次轮回(从start with child_value=2701)末尾找数据:

(1.1) 139048   2701 270101

(1.2) 139058   2701 270101

第二次轮回(从(1.1)末尾找数据:

(2.1) 139048   270101 27010101

(2.2) 139058   270101 27010101

第三轮回(从(1.2)末尾)找数据:

(3.1) 139048 270101   27010101

(3.2) 139058 270101   27010101

退出轮回,最初施行where type_id=139048

获得三条记载。

假如想获得准确的后果,SQL语句应改为

select * from

(select * from fnd_flex_value where type_id=139048)ffv

start with child_value=270101

connect by prior child_value=ffv.parent_value;

=====================================================================

connect by 是结构化查询顶用到的,其基本语法是:

select ... from tablename

where 前提3

start with 前提1

connect by 前提2;

例:

select * from table

start with org_id = 'HBHqfWGWPy'

connect by prior org_id = parent_id;

简单说来是将一个树状结构存储在一张表里,好比一个表中具备两个字段:

org_id,parent_id那么通过表现每一条记载的parent是谁,就能够构成一个树状结构。

用上述语法的查询能够取得这棵树的所有记载。


全新的路由器不仅让你更稳定快速地连接无线网络,更可以让家中的智能设备连接在一起。



……

相关阅读