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

मुझे कैसे याद होगा कि CONNECT BY प्रश्नों में PRIOR को किस दौर में जाना चाहिए

मैं हमेशा भावों को JOIN . में डालने का प्रयास करता हूं निम्नलिखित क्रम में है:

joined.column = leading.column

यह प्रश्न:

SELECT  t.value, d.name
FROM    transactions t
JOIN
        dimensions d
ON      d.id = t.dimension

या तो "प्रत्येक लेन-देन के लिए, संबंधित आयाम का नाम ढूंढें" या "प्रत्येक आयाम के लिए, सभी संबंधित लेन-देन मान ढूंढें" जैसा व्यवहार किया जा सकता है।

इसलिए, यदि मैं किसी लेन-देन की खोज करता हूं, तो मैं भावों को निम्नलिखित क्रम में रखता हूं:

SELECT  t.value, d.name
FROM    transactions t
JOIN
        dimensions d
ON      d.id = t.dimension
WHERE   t.id = :myid

, और यदि मैं कोई आयाम खोजता हूं, तो:

SELECT  t.value, d.name
FROM    dimensions d
JOIN
        transactions t
ON      t.dimension = d.id
WHERE   d.id = :otherid

पहले की क्वेरी शायद सबसे पहले (t.id) . पर इंडेक्स स्कैन का उपयोग करेगी , फिर (d.id . पर ), जबकि बाद वाला पहले (d.id) . पर इंडेक्स स्कैन का उपयोग करेगा , फिर (t.dimension) . पर , और आप इसे आसानी से क्वेरी में ही देख सकते हैं:खोजे गए फ़ील्ड बाईं ओर हैं।

JOIN . में ड्राइविंग और संचालित टेबल इतनी स्पष्ट नहीं हो सकती हैं , लेकिन यह CONNECT BY . के लिए घंटी की तरह स्पष्ट है क्वेरी:PRIOR पंक्ति चल रही है, गैर-PRIOR संचालित है।

इसलिए यह प्रश्न:

SELECT  *
FROM    hierarchy
START WITH
        id = :root
CONNECT BY
        parent = PRIOR id

इसका अर्थ है "उन सभी पंक्तियों को खोजें जिनके parent दिया गया id है ". यह क्वेरी एक पदानुक्रम बनाती है।

इसका इलाज इस तरह किया जा सकता है:

connect_by(row) {
  add_to_rowset(row);

  /* parent = PRIOR id */
  /* PRIOR id is an rvalue */
  index_on_parent.searchKey = row->id;

  foreach child_row in index_on_parent.search {
    connect_by(child_row);
  }
}

और यह प्रश्न:

SELECT  *
FROM    hierarchy
START WITH
        id = :leaf
CONNECT BY
        id = PRIOR parent

का अर्थ है "उन पंक्तियों को खोजें जिनकी id दिया गया parent है ". यह क्वेरी पूर्वजों की श्रृंखला बनाती है।

हमेशा PRIOR डालें अभिव्यक्ति के दाहिने हिस्से में।

PRIOR column के बारे में सोचें आपकी सभी पंक्तियों की निरंतर खोज की जाएगी।



  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 संग्रहीत कार्यविधि में :OLD और :NEW छद्म अभिलेखों की प्रतिलिपि बना सकता/सकती हूँ?

  2. SQL का उपयोग करके एकाधिक तालिकाओं से हटाने का प्रयास कर रहा है

  3. ओरेकल में एमओडी () फ़ंक्शन

  4. Oracle में इस पथ को उल्टा करें z/y/x से x/y/z . तक

  5. ओरेकल एसक्यूएल डेवलपर में क्लॉब फील्ड डेटा कैसे निर्यात करें?