-- Alle Eltern

SELECT kind, elter 
FROM   eltern
;

-- Alle Großeltern

SELECT e1.kind, e2.elter 
FROM   eltern e1 JOIN eltern e2 ON e1.elter = e2.kind
;

-- Alle Urgroßeltern

SELECT e1.kind, e3.elter 
FROM        eltern e1 
       JOIN eltern e2 ON e1.elter = e2.kind
       JOIN eltern e3 ON e2.elter = e3.kind
;

-- Alle Ururgroßeltern

SELECT e1.kind, e4.elter 
FROM        eltern e1 
       JOIN eltern e2 ON e1.elter = e2.kind
       JOIN eltern e3 ON e2.elter = e3.kind
       JOIN eltern e4 ON e3.elter = e4.kind
;

-- Alle Vorfahren

SELECT   person, vorfahre, generation 
FROM     vorfahren
ORDER BY person, generation
;

SELECT   person, vorfahre, generation
FROM     vorfahren
WHERE    person = 'Sibylle'
ORDER BY generation
;

-- Ohne Rekursion kann diese Anfrage nicht korrekt beantwortet werden.
-- Folgendes funktioniert nur, wenn die maximale Anzahl der
-- Generationen bekannt ist:

SELECT kind AS person, elter AS vorfahre, 1 AS generation 
FROM   eltern

UNION

SELECT e1.kind AS person, e2.elter AS vorfahre, 2 AS generation
FROM   eltern e1 JOIN eltern e2 ON e1.elter = e2.kind

UNION

SELECT e1.kind AS person, e3.elter  AS vorfahre, 3 AS generation
FROM        eltern e1  
       JOIN eltern e2 ON e1.elter = e2.kind
       JOIN eltern e3 ON e2.elter = e3.kind

UNION

SELECT e1.kind AS person, e4.elter AS vorfahre, 4 AS generation
FROM        eltern e1
       JOIN eltern e2 ON e1.elter = e2.kind
       JOIN eltern e3 ON e2.elter = e3.kind
       JOIN eltern e4 ON e3.elter = e4.kind
;


