同一張表中,通過傳入的id來獲取所有關聯的父id

2021-10-02 07:55:35 字數 711 閱讀 6478

在很多資料庫表的設計當中,在設計到樹狀結構資料時,並沒有採用新建關聯表,而是將所有的資料都放在的一張表中,即子id與父id共存於一條資料當中。

在這裡,我們可以用遞迴查詢的sql來處理:

select a.*,level  from  表名 a start  with 條件1  connnect by prior 條件2  where  條件3

例:

(1)、通過父id查詢所有的子id

select id from sc_org start with pid ='0' connect by prior id = pid;

(2)、通過子id查詢所有的父id

select pid from sc_org start with id ='1049692015' connect by prior pid = id;

1、start with :後面的條件表示遞迴的起始點。(從pid或id為多少時開始查)

2、connect by 條件2:表示遞迴時前後兩條資料的關聯關係

3、prior的位置決定了遞迴時的具體關係或者說是決定了查詢時的檢索順序

prior id = pid   可以理解為當前節點的id等於下乙個節點的pid

prior pid = id   可以理解為當前節點的pid等於下乙個節點的id

4、level關鍵字表示層次: 可通過level 關鍵字表示查詢結果所在層次,根節點的層號為1

獲取一張表中列的資料

要獲取一張表的列本身的資料,首先要了解sqlserver中的五張系統表 sysobjects,syscolumns,systypes,sysindexes,sysindexkeys sysobjects,每個資料庫都有一張這樣的系統表,它記錄了所有資料庫物件,比如我們從裡面可以獲取主鍵,表物件名等 ...

MySQL 如何對同一張表來查詢並update ?

mysql 不允許對同一張表來查詢並update的。如下面的 則不能執行。update thb as outer thb set cnt select count from thb as innter thb where innter thb.type outer thb.type 可以通過inne...

更新同一張表的整列字段

先需要先把需要更新的整列結果查詢出來。這裡記錄下mysql時間的函式 date format 欄位名,y m d h i s 第二個引數是要轉換的格式,因為我本來的格式中有毫秒。以下是舉例 轉換的sql select id as dd,date format created,y m d h i s ...