Не то нажал... :((
CREATE TABLE C (
ID integer,
NAME VARCHAR(100)
);
CREATE TABLE T (
ID integer,
OWNERCODE integer,
CODE integer
);
with recursive X (ID, OWNERCODE, CODE, OWNCLASS, CLASS) as
(select T.ID, OWNERCODE, CODE, C2.name as OWNCLASS, C1.NAME as CLASS from
T
inner join C C1 on C1.ID = CODE
left join C C2 on C2.ID = OWNERCODE
where ownercode=0
union all
select T.ID, OWNERCODE, CODE, C2.name as OWNCLASS, C1.NAME as CLASS from T
inner join C C1 on C1.ID = CODE
left join C C2 on C2.ID = OWNERCODE
inner join X on T.OWNERCODE = X.CODE)
select * from X