کوئری 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;
/
ما 10 تا رکورد داریم که شرایط آن بصورت زیر می باشد:
 [ID[10,30,50 شامل فرزند مي باشند
پدر با ID=10 شامل فرزندان [20,30] مي باشد
پدر با ID=30 شامل فرزند [60] مي باشد
پدر با ID=50 شامل فرزندان [70,80] مي باشد
کوئری آن در دیتابیس 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

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

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

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

keyboard_arrow_up
Oracle APEX Capabilities (OAC)