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

PostgreSQL:तत्व के लिए अनुमति प्राप्त करें, रूट तक जाएं

आप RECURSIVE CTE इसके लिए:

WITH RECURSIVE Perms(ID, Name, ParentID, CanRead, CanWrite, CanDelete) AS (
   SELECT i.ID, i.Name, l.LID AS ParentID, p.CanRead, p.CanWrite, p.CanDelete
   FROM Item AS i
   LEFT JOIN Permission AS p ON i.ID = p.ID
   LEFT JOIN Links AS l ON i.ID = l.ID
),  GET_PERMS(ID, ParentID, CanRead, CanWrite, CanDelete) AS (
    -- Anchor member: Try to get Read/Write/Delete values from Permission table
    SELECT ID, ParentID, CanRead, CanWrite, CanDelete
    FROM Perms
    WHERE ID = 3

  UNION ALL

    -- Recursive member: terminate if the previous level yielded a `NOT NULL` result
    SELECT p.ID, p.ParentID, p.CanRead, p.CanWrite, p.CanDelete
    FROM GET_PERMS AS gp 
    INNER JOIN Perms AS p ON gp.ParentID = p.ID    
    WHERE gp.CanRead IS NULL
)
SELECT CanRead, CanWrite, CanDelete 
FROM GET_PERMS
WHERE CanRead IS NOT NULL

रिकर्सिव सीटीई समाप्त हो जाता है जब एक अनुमति डेटाबेस से रिकॉर्ड पुनर्प्राप्त कर लिया गया है।

यहां डेमो करें



  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. IF कथन के लिए शर्त के रूप में गतिशील SQL (EXECUTE)

  4. \PDO::ATTR_EMULATE_PREPARES => true . का उपयोग करते समय Laravel डेटा बेमेल त्रुटि

  5. PostgreSQL के साथ एक इकाई के लिए एकाधिक हाइबरनेट अनुक्रम जनरेटर