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

Oracle SQL पूर्ण पदानुक्रम इनपुट के रूप में किसी भी नोड को दिया गया है

यदि आप इसे दृश्य के रूप में उपयोग करना चाहते हैं तो आप निम्न के रूप में कुछ कर सकते हैं:

WITH rek AS (SELECT item.id
                  , item.name
                  , connect_by_root item.id root_id
               FROM item
              START WITH parent_id IS null
            CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
     , startItem.name startName
     , childItem.id childID
     , childItem.name childName
  FROM rek startItem
  JOIN rek childItem
  USING (root_id)
-- WHERE startItem.id = 3 -- This would be done from outside the view

सबक्वेरी rek पेड़ के सभी भाई-बहनों को मूल तत्व से जोड़ता है। फिर आपको केवल दो बार इस क्वेरी का उपयोग करना होगा और माता-पिता के संबंध से जुड़े सभी तत्वों को प्राप्त करने के लिए इसे मूल तत्व के माध्यम से कनेक्ट करना होगा।

यदि आप परिणाम सेट को कम करना चाहते हैं तो आप SYS_CONNECT_BY_PATH का उपयोग कर सकते हैं ऐसा करने के लिए:

WITH rek AS (SELECT item.id
                  , item.name
                  , connect_by_root item.id root_id
                  , SYS_CONNECT_BY_PATH(item.id, '/') path
               FROM item
              START WITH parent_id IS null
            CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
     , startItem.name startName
     , childItem.id childID
     , childItem.name childName
     , childItem.path 
  FROM rek startItem
  JOIN rek childItem
    ON startItem.root_id = childItem.root_id
    AND (startItem.path LIKE childItem.path||'/%'
      OR childItem.path LIKE startItem.path||'/%'
      OR childItem.id = startItem.id)

उदाहरण के लिए यह आपको केवल आपके बच्चों और आपके माता-पिता को शुरुआती बिंदु देगा और अन्य पत्तों से कोई प्रविष्टि नहीं देगा।



  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 11 SQL :1 पंक्ति को x पंक्तियों में विभाजित करें और एक नया कॉलम डालें

  2. Oracle ने डिफ़ॉल्ट NLS_LANG सेट किया

  3. PostgreSQL में NUMTODSINTERVAL

  4. SQL त्रुटि:ORA-00922:गुम या अमान्य विकल्प समग्र कुंजी बना रहा है

  5. क्या Oracle OCI कार्य करता है OCIPasswordChange एन्क्रिप्टेड ट्रांसमिटेड पासवर्ड