کوئری Parent-Child در اوراکل

کوئری Parent-Child در اوراکل

 

در ابتدا اسکریپت زیر را در دیتابیس اوراکل اجرا کنید. حال ما یک جدول ایجاد کرده و ۱۰ رکورد در آن ثبت می کنیم.

Create table test_node (ChildID number,ChildName varchar2(100),Family_ID number, FullName varchar2(100))
/
Insert into TEST_NODE (CHILDID, CHILDNAME) Values (10, 'saeed');
Insert into TEST_NODE (CHILDID, CHILDNAME, FAMILY_ID) Values (20, 'armin', 10);
Insert into TEST_NODE (CHILDID, CHILDNAME, FAMILY_ID) Values (30, 'ali', 10);
Insert into TEST_NODE (CHILDID, CHILDNAME) Values (40, 'hamid');
Insert into TEST_NODE (CHILDID, CHILDNAME) Values (50, 'pedram');
Insert into TEST_NODE (CHILDID, CHILDNAME, FAMILY_ID) Values (60, 'neda', 30);
Insert into TEST_NODE (CHILDID, CHILDNAME, FAMILY_ID) Values (70, 'ahmad', 50);
Insert into TEST_NODE (CHILDID, CHILDNAME, FAMILY_ID) Values (80, 'sara', 50);
Insert into TEST_NODE (CHILDID, CHILDNAME) Values (90, 'ehsan');
Insert into TEST_NODE (CHILDID, CHILDNAME) Values (100, 'elham');
COMMIT;
/
ما ۱۰ تا رکورد داریم که شرایط آن بصورت زیر می باشد:
 [ID[10,30,50 شامل فرزند می باشند
پدر با ID=10 شامل فرزندان [۲۰,۳۰] می باشد
پدر با ID=30 شامل فرزند [۶۰] می باشد
پدر با ID=50 شامل فرزندان [۷۰,۸۰] می باشد
کوئری آن در دیتابیس oracle بدین صورت می باشد: خروجی هر level را که فرزند داشته باشد اعلان می کند.

select t.*, (Case When (case when connect_by_isleaf = 1 then 0
when level = 1 then 1
else -1
end) = 0 Then '--'
Else 'Has child'
End) as status
from test_node t
start with t.family_id is null
connect by prior t.childid=t.family_id
order siblings by t.childid;
اگر بخواهیم فقط برای اولین ند های سطح این مسئله را معین کنیم باید بدین صورت کوئری را در اوراکل اصلاح کنیم.
select t.*,(Case When (case when connect_by_isleaf = 1 then 0
when level = 1 then 1
else -1
end) = 1 Then 'Has child'
Else '--'
End) as status, Level
from test_node t
start with t.family_id is null
connect by prior t.childid=t.family_id
order siblings by t.childid;

 

 

کوئری Parent-Child در اوراکل
به این مطلب رای دهید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست
افزونش-افزایش دانش سرمایه گذاری