WITH cl(id, idpotomok) AS ( (SELECT c1.id, c2.id FROM rn_clovek c1, rn_clovek c2 WHERE (c2.id_otec=c1.id AND c1.id_otec IS NULL) UNION ALL SELECT c1.id, c2.id FROM rn_clovek c1, rn_clovek c2 WHERE (c2.id_matka=c1.id AND c1.id_matka IS NULL) ) UNION ALL ( SELECT cl.idpotomok, c.id FROM rn_clovek c, cl WHERE cl.idpotomok=c.id_otec UNION ALL SELECT cl.idpotomok, c.id FROM rn_clovek c, cl WHERE cl.idpotomok=c.id_matka ) UNION ALL ( SELECT cl.id, c.id FROM rn_clovek c, cl WHERE cl.idpotomok=c.id_otec UNION ALL SELECT cl.id, c.id FROM rn_clovek c, cl WHERE cl.idpotomok=c.id_matka ) ) SELECT potomok.meno, potomok.priezvisko, otec.meno, otec.priezvisko FROM cl JOIN rn_clovek otec ON otec.id=cl.id JOIN rn_clovek potomok ON potomok.id=cl.idpotomok ************************************************************************************************************************** ************************************************************************************************************************** ************************************************************************************************************************** ************************************************************************************************************************** WITH cl(id, idpotomok) AS ( (SELECT c1.id, c2.id FROM rn_clovek c1, rn_clovek c2 WHERE (c2.id_otec=c1.id AND c1.id_otec IS NULL) or (c2.id_matka=c1.id AND c1.id_matka IS NULL) ) UNION ALL ( SELECT cl.idpotomok, c.id FROM rn_clovek c, cl WHERE cl.idpotomok=c.id_otec or cl.idpotomok=c.id_matka ) UNION ALL ( SELECT cl.id, c.id FROM rn_clovek c, cl WHERE cl.idpotomok=c.id_otec or cl.idpotomok=c.id_matka ) ), temp(id,idpotomok) AS( SELECT DISTINCT id, idpotomok FROM cl ) SELECT potomok.meno, potomok.priezvisko, otec.meno, otec.priezvisko FROM temp JOIN rn_clovek otec ON otec.id=temp.id JOIN rn_clovek potomok ON potomok.id=temp.idpotomok WHERE otec.pohlavie='M'