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

लूप के लिए रिकर्सिव सीटीई स्टॉप कंडीशन

WITH RECURSIVE paths AS (
    -- For simplicity assume node 1 is the start
    -- we'll have two starting nodes for data = 1 and 2
    SELECT DISTINCT
        src           as node
        , data        as data
        , 0           as depth
        , src::text   as path
        , ''          as edgeAdded   
    FROM edges
    WHERE
        src = 1

    UNION ALL

    SELECT DISTINCT
        edges.dst
        , edges.data
        , depth + 1
        , paths.path || '->' || edges.dst::text
        , edges.src::text || '->' || edges.dst::text
    FROM paths
    JOIN edges ON edges.src = paths.node AND edges.data = paths.data
    AND NOT paths.path LIKE '%' || edges.dst::text || '%' 
        -- AND eliminate loops?
)
SELECT * FROM paths;

यहाँ शर्त के साथ AND NOT paths.path LIKE '%' || edges.dst::text || '%' हम पीछे के किनारों से बच रहे हैं जो एक लूप की ओर ले जाएगा।
http:/ /www.sqlfiddle.com/#!12/086ee/1



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि:ऑपरेटर मौजूद नहीं है:संख्यात्मक ~* अज्ञात

  2. वर्चर फ़ील्ड के प्रकार को पूर्णांक में बदलें:पूर्णांक टाइप करने के लिए स्वचालित रूप से कास्ट नहीं किया जा सकता

  3. ताज़ा भौतिक दृश्य के दौरान पोस्टग्रेज 9.4 हैंग हो जाता है

  4. मैक ओएस एक्स (10.9.4) में 'PHP' मेक को कैसे ठीक करें?

  5. ब्रिंक/नोड-पोस्टग्रेज के साथ पोस्टग्रेज में बल्क इंसर्ट