Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

हाइबरनेट का उपयोग करके पदानुक्रमित परिणाम प्राप्त करने के लिए डेटाबेस क्वेरी पर रिकर्सन - जावा

जावा में रिकर्सिव लुकअप न करें। यह पैमाना नहीं होगा क्योंकि आप बहुत सारे भेज रहे होंगे डेटाबेस के लिए प्रश्नों का। डेटाबेस पर सीधे एक (एकल) रिकर्सिव क्वेरी का उपयोग करें जो बेहतर प्रदर्शन और स्केल करेगा।

आपने अपना DBMS निर्दिष्ट नहीं किया लेकिन पुनरावर्ती क्वेरी सभी आधुनिक डेटाबेस द्वारा समर्थित हैं। निम्नलिखित मानक एएनएसआई एसक्यूएल है:

with recursive ancestry as (
   select child, parent, 1 as level
   from users
   where parent = 'Grandfather' -- this is the one who logs in
   union all
   select c.child, c.parent, p.level + 1
   from users c
     join ancestry p on p.child = c.parent
)
select child, level
from ancestry
order by level desc;

उदाहरण:http://rextester.com/TJGTJ95905

संपादित करें असली डेटाबेस का खुलासा होने के बाद।

Oracle में आपके पास ऐसा करने के दो तरीके हैं।

"पारंपरिक" तरीका connect by . का उपयोग करना है जो एक पुनरावर्ती क्वेरी का एक अधिक कॉम्पैक्ट रूप है तो SQL मानक के साथ क्या आया:

select child, level
from users
start with parent = 'Grandfather'
connect by prior child = parent
order by level desc;

आप कर सकते थे Oracle में भी एक सामान्य तालिका अभिव्यक्ति का उपयोग करें। हालाँकि SQL मानक के लिए कीवर्ड recursive . की आवश्यकता होती है, फिर भी अनिवार्य होने के लिए, ओरेकल ने मानक के उस हिस्से को अनदेखा करना चुना, इसलिए आपको इसे हटाना होगा। LEVEL Oracle में एक छद्म-स्तंभ है जिसका उपयोग केवल connect by . के साथ किया जा सकता है इसलिए इसका उपयोग CTE समाधान में नहीं किया जा सकता:

with ancestry (child, parent, lvl) as (
   select child, parent, 1 as lvl
   from users
   where parent = 'Grandfather'
   union all
   select c.child, c.parent, p.lvl + 1
   from users c
     join ancestry p on p.child = c.parent
)
select child, lvl
from ancestry
order by lvl desc



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हाइबरनेट का उपयोग करके Oracle में बड़े BLOBs (>100MB) को कैसे बनाए रखें?

  2. Oracle में REGEXP_INSTR () फ़ंक्शन

  3. वापसी पंक्तियाँ जिनमें Oracle में संख्यात्मक मान होते हैं

  4. ओरेकल में कई रिकॉर्ड डालें

  5. Oracle प्रक्रिया बनाएं