oracle處理父子節點關係,oracle父子節點

來源:互聯網
上載者:User

oracle處理父子節點關係,oracle父子節點

平時在處理樹形結構的關係的時候,是一個很複雜的事情,我們可能通過程式碼去一層一層的遍曆父節點或者子節點,這樣做的缺點很明顯,效率不高而且操作複雜度比較大。而當我們在使用Oracle資料庫的時候,我們可以有一種簡單解決方案,如下:

 

1.首先建立一張表,儲存父子關係

drop table tmp_node;

create table tmp_node(id varchar2(500),p_id varchar2(500));

 

2.向表中插入資料

insert into tmp_node(p_id,id) values(null,1);

insert into tmp_node(p_id,id) values(1,'1-1');

insert into tmp_node(p_id,id) values(1,'1-2');

insert into tmp_node(p_id,id) values('1-1','1-1-1');

insert into tmp_node(p_id,id) values('1-1','1-1-2');

insert into tmp_node(p_id,id) values('1-2','1-2-1');

 

3.查看錶中資料

select * from tmp_node;

編號

P_ID

ID

1

 

1

2

1

1-1

3

1

1-2

4

1-1

1-1-1

5

1-1

1-1-2

6

1-2

1-2-1

 

4.建立視圖(這一步最重要)

create or replace view tmp_node_view as

select distinct level lvl,connect_by_root(id) leaf_id,t.*

from tmp_node t

connect by prior t.p_id = t.id;

 

5.查看視圖資料

select  * form tmp_node_view order by leaf_id,lvl;

編號

LVL

LEAF_ID

ID

P_ID

1

1

1

1

 

2

1

1-1

1-1

1

3

2

1-1

1

 

4

1

1-1-1

1-1-1

1-1

5

2

1-1-1

1-1

1

6

3

1-1-1

1

 

7

1

1-1-2

1-1-2

1-1

8

2

1-1-2

1-1

1

9

3

1-1-2

1

 

10

1

1-2

1-2

1

11

2

1-2

1

 

12

1

1-2-1

1-2-1

1-2

13

2

1-2-1

1-2

1

14

3

1-2-1

1

 

 

6.使用說明

主要使用的leaf_id和id兩個欄位的值。

欄位說明:lvl欄位代表節點的深度,leaf_id代表分葉節點。p_id父節點id,id節點本生id。

當需要知道一個節點有哪些父節點的時候,只需要根據leaf_id,查詢id欄位即可:

select * from tmp_node_view where leaf_id = '1-2-1';

編號

LVL

LEAF_ID

ID

P_ID

1

1

1-2-1

1-2-1

1-2

2

3

1-2-1

1

 

3

2

1-2-1

1-2

1

當需要知道一個節點有哪些子節點的時候,只需要根據id查詢leaf_id即可:

select * from tmp_node_view where id = '1-2';

編號

LVL

LEAF_ID

ID

P_ID

1

1

1-2

1-2

1

2

2

1-2-1

1-2

1

注意:所有的父節點和子節點的查詢,都是包含自身節點的。


jQuery怎判斷兩個節的關係,如是“父子關係”,“兄弟關係”,"子父關係"

千總,是這樣的。jQuery裡面的“父子關係”,“兄弟關係“是基於html DOM節點的。

比如你的例子,
<div class="div" id=div1>
<font class="fount1">我是1!</font>
<div id=div2>
<font class="fount2">我是2!</font>
</div>
</div>
div1是html頁面body下的一個子節點,而這個div1又有fount1,和div2這兩個子節點,fount1和div2是兄弟關係,div2下面還有一個fount2節點 。
你要用jQuery去找什麼父節點,子節點,首先要搞清楚這個節點在HTML中是什麼關係,然後你才可以用parent(),child()這些方法。

下面是例子
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'test.jsp' starting page</title>
<script type="text/javascript" src="../js/jquery/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
alert($(".fount1").parents(".div").html());
alert($(".fount2").parents(".div").html());
});
</script>

</head>

<body>
<div class="div">
<font class="fount1">我是1!</font>
<div>
<font class="fount2">我是2!</font>
</div>
</div>
</body>
</html>...餘下全文>>
 
oracle 父子表關聯,A,B父子表關係,1A => 多B 怎把B表相關聯多條資料中的某一列併入A表成為一條記錄

以oracle中的scott使用者下的部門表和員工表為例。
SELECT * FROM EMP;
SELECT * FROM DEPT;

SELECT D.DEPTNO, D.DNAME, D.LOC, WMSYS.WM_CONCAT(E.EMPNO)
FROM DEPT D, EMP E
WHERE D.DEPTNO = E.DEPTNO
GROUP BY D.DEPTNO, D.DNAME, D.LOC;
可以將員工編號合并為一條,其中e.empno可以替換成其他欄位。
有什麼不明白再接著問。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.