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是谁,就能够构成一个树状结构。
用上述语法的查询能够取得这棵树的所有记载。