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可以替換成其他欄位。
有什麼不明白再接著問。