SELECT id, uuid, parent_id, parent_uuid, content, notetype, creation_date, updated_date, lastview_date, deleted_date FROM ( WITH RECURSIVE parents ( id, uuid, parent_id, parent_uuid, content, notetype, creation_date, updated_date, lastview_date, deleted_date, cycle ) AS ( SELECT notes.id, notes.uuid, note_parents.id, note_parents.uuid, notes.content, notes.notetype, notes.creation_date, notes.updated_date, notes.lastview_date, notes.deleted_date, ','||notes.id||',' FROM notes INNER JOIN note_relationships ON notes.id = note_relationships.note_id AND notes.notetype = 'note' INNER JOIN notes as note_parents ON note_parents.id = note_relationships.parent_id WHERE notes.id = ? -- IMPORTANT: THIS IS THE PARAMETER UNION SELECT DISTINCT notes.id, notes.uuid, next_parent.id, next_parent.uuid, notes.content, notes.creation_date, notes.updated_date, notes.lastview_date, notes.deleted_date, parents.cycle||notes.id||',' FROM notes INNER JOIN parents ON parents.parent_id = notes.id LEFT JOIN note_relationships ON note_relationships.note_id = notes.id LEFT JOIN notes as next_parent ON next_parent.id = note_relationships.parent_id WHERE parents.cycle NOT LIKE '%,'||notes.id||',%' ) SELECT * from parents);