کوئری 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;
/
ما ۱۰ تا رکورد داریم که شرایط آن بصورت زیر می باشد:
[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) = 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 برای نسخه بعدی
- سعید حسن پور در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- حسین ابراهیم زاده در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- مهدی جوینی در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- محمد در نصب و راه اندازی (Standalone) اوراکل APEX
بایگانی
- اردیبهشت ۱۴۰۱ (۱)
- مرداد ۱۴۰۰ (۱)
- شهریور ۱۳۹۹ (۱)
- بهمن ۱۳۹۸ (۱)
- دی ۱۳۹۸ (۶)
- آذر ۱۳۹۸ (۲۰)
- آبان ۱۳۹۸ (۱۶)
- مهر ۱۳۹۸ (۲۲)
- شهریور ۱۳۹۸ (۲)
- مرداد ۱۳۹۸ (۷)
- تیر ۱۳۹۸ (۹)
- فروردین ۱۳۹۸ (۳)
برچسبها
AOP
APEX
apexrad
captcha
CDN
constraint
ebs
epg
forms
index
injection
longtype
Materialized-view
Oracle Application Express
orclapex
performance
Persian Sort
plsql
session
sql
standalone
variable scope
XE
امنیت
اوراکل
اپکس
ایندکس
ایپکس
بنبست
بهینه ساز
تاریخ شمسی
ترجمه
ترفند
حروف فارسی
داکیومنت
داینامیک
شمسی
مرتب سازی فارسی
نصب
نکته
پلاگین
یونیک