کوئری 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;
/
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) = 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;
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
جستجو
مطالب اخیر
نظرات اخیر
- محمد در تبدیل تاریخ ها در اوراکل
- مجتبی خالقداد در پلاگین کد امنیتی اوراکل اپکس(ای پکس)
- سعید حسن پور در تبدیل تاریخ ها در اوراکل
- حسین در تبدیل تاریخ ها در اوراکل
- مهرسا سعادت در نقشه راه اوراکل APEX برای نسخه بعدی
برچسبها
AOP
APEX
apexrad
captcha
CDN
constraint
ebs
epg
forms
index
injection
iran
iranoug
longtype
Materialized-view
Oracle Application Express
orclapex
performance
Persian Sort
plsql
session
sql
standalone
variable scope
XE
امنیت
اوراکل
اپکس
ایران
ایندکس
ایپکس
بنبست
بهینه ساز
تاریخ شمسی
ترجمه
ترفند
حروف فارسی
داکیومنت
داینامیک
شمسی
مرتب سازی فارسی
نصب
نکته
پلاگین
یونیک