有兩張表
a表
create table a
(aid varchar2(40),
name varchar2(100),
parentid varchar2(40)
);
b表
create table b
(aid varchar2(40),
operation varchar2(100)
);
a表資料如下
AID name parentid
420000000000 湖北省 000000000000
420200000000 湖北省黃石市 420000000000
420202000000 黃石市黃石港區 420200000000
420203000000 黃石市西塞山區 420200000000
b表資料如下
AID operation
420000000000 12312321321
希望得到結果
AID operation
420000000000 12312321321
420200000000 12312321321
420202000000 12312321321
420203000000 12312321321
求大神支招,為了減少壓力在b表只存盤父ID,但是想得到父ID下所有子集的結果,想一個陳述句搞定
uj5u.com熱心網友回復:
-- 樓主百度一下 這串東西。oracle connect by prior id = id
uj5u.com熱心網友回復:
重新描述下,免得有誤會有兩張表
a表
create table a
(aid varchar2(40),
name varchar2(100),
parentid varchar2(40)
);
b表
create table b
(aid varchar2(40),
operation varchar2(100)
);
a表資料如下
AID name parentid
420000000000 湖北省 000000000000
420200000000 湖北省黃石市 420000000000
420202000000 黃石市黃石港區 420200000000
420203000000 黃石市西塞山區 420200000000
b表資料如下
AID operation
420000000000 12312321321
420200000000 36565112121
希望得到結果
AID operation
420000000000 12312321321
420200000000 12312321321
420202000000 12312321321
420203000000 12312321321
420200000000 36565112121
420202000000 36565112121
420203000000 36565112121
求大神支招,為了減少壓力在b表只存盤父ID,但是想得到父ID下所有子集的結果,想一個陳述句搞定
uj5u.com熱心網友回復:
我知道這個,但是這個不是只能在一張表里使用嗎uj5u.com熱心網友回復:
select t1.aid, b.operationfrom (select a.*, level, connect_by_root(a.aid) as rootid
from a
start with a.parentid = '000000000000'
connect by a.parentid = prior a.aid) t1,
b
where t1.rootid = b.aid;
看看這個應該可以滿足你要求
uj5u.com熱心網友回復:
可以看下我第二個描述,其實B表里面的AID可能存的是a表里面的任何一個ID,也就是說A表的父ID是B表里面存的ID,不是只有那一條資料uj5u.com熱心網友回復:
我解決了,在這個基礎上改了一下,感謝給靈感uj5u.com熱心網友回復:
select t.aid,t.operation from (select a.*, level, connect_by_root(a.aid) as rootid,b.operation
from a,b
start with a.parentid = b.aid
connect by a.parentid = prior a.aid) t;
uj5u.com熱心網友回復:
嗯,相應的改改就可以滿足自己的需求了。樹狀結構的用connect by就對了。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/74981.html
標籤:開發
上一篇:求一本oracle的書籍
下一篇:orcale OEM配置失敗
