Re: Reporting by family tree - Mailing list pgsql-novice

From David G. Johnston
Subject Re: Reporting by family tree
Date
Msg-id CAKFQuwaMRJUpMz8Usd3XHfymgdR=51G-CjOpi16nxWh+kytD0Q@mail.gmail.com
Whole thread Raw
In response to Re: Reporting by family tree  (Ibrahim Shaame <ishaame@gmail.com>)
Responses Re: Reporting by family tree  (Ibrahim Shaame <ishaame@gmail.com>)
List pgsql-novice
On Thu, Oct 5, 2023 at 7:54 AM Ibrahim Shaame <ishaame@gmail.com> wrote:
WITH RECURSIVE ukoo AS (
    SELECT namba,
         jina,
         baba,
         babu,
         nasaba_1,
         daraja
    FROM majina2
    WHERE majina2.nasaba_1 IN (SELECT DISTINCT namba FROM majina2)
 
UNION ALL
 
    SELECT mtoto.namba,
         mtoto.jina,
         mtoto.baba,
         mtoto.babu,
         mtoto.nasaba_1,
         daraja
    FROM majina2 mtoto
          WHERE mtoto.nasaba_1 NOT IN (SELECT DISTINCT namba FROM majina2)


The reason it is called a "recursive" CTE is that the subquery following the union all is recursive in nature - i.e., it should refer to itself.  You named the CTE ukoo but you never actually refer to ukoo in the recursive subquery.  Thus, you have not written a recursive query.

When you reference the recursive "table" in the subquery its contents contain the results of the previous iteration, that is what allows you to select a child record and then consider that record a parent when finding the next depth/layer of children.

David J.

pgsql-novice by date:

Previous
From: Ibrahim Shaame
Date:
Subject: Re: Reporting by family tree
Next
From: jinser
Date:
Subject: Is `DATE` a function?