階層データ

sql server 階層データを試す

階層データの取得SQLを実地。

テーブル

列名 データ型
id int
parent_id int
name nvarchar(30)
data_type int

データ

id parent_id name data_type
1 NULL メニュー1 0
2 1 メニュー1の1 0
3 1 メニュー1の2 0
4 NULL メニュー2 0
5 4 メニュー2の1 0
6 5 メニュー2の1の1 0
7 6 メニュー2の1の1 の1 0

1階層取得

SQL
select a.id, a.name from menu_1 as a where parenet_id is null
結果
id name
1 メニュー1
4 メニュー2

2階層取得

SQL
select b.id, b.name from menu_1 as a
 left join menu_1 as b on a.id = b.parenet_id
where 
 a.id = 1
結果
id name
1 メニュー1の1
4 メニュー1の2

3階層取得

SQL
select 
 c.id, c.name 
from menu_1 as a
 left join menu_1 as b on b.parenet_id = a.id 
 left join menu_1 as c on c.parenet_id = b.id 
where 
 a.id = 4
結果
id name
1 メニュー2の1の1

4階層取得

SQL
select 
 d.id, d.name 
from menu_1 as a
 left join menu_1 as b on b.parenet_id = a.id 
 left join menu_1 as c on c.parenet_id = b.id 
 left join menu_1 as d on d.parenet_id = c.id 
where 
 a.id = 4
結果
id name
1 メニュー2の1の1の1