کوئری 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;

 

 

Rate this post

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

نشانی ایمیل شما منتشر نخواهد شد.

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

فهرست
Oracle APEX Capabilities (OAC)