postgresql7.1 (t1.object_type = 'group' or t1.object_type = 'person') t1.object_type = :start_with select types.pretty_name, types.object_type, types.tree_level, types.indent, case when valid_types.object_type = null then 0 else 1 end as valid_p from (select t2.pretty_name, t2.object_type, tree_level(t2.tree_sortkey) - tree_level(t1.tree_sortkey) as tree_level, repeat(' ', (tree_level(t2.tree_sortkey) - tree_level(t1.tree_sortkey)) * 4) as indent, t2.tree_sortkey from acs_object_types t1, acs_object_types t2 where t2.tree_sortkey between t1.tree_sortkey and tree_right(t1.tree_sortkey) and $start_with_clause ) types left outer join (select object_type from rel_types_valid_obj_two_types where rel_type = :rel_type ) valid_types using (object_type) order by types.tree_sortkey