postgresql9.6 with recursive object_hierarchy(object_type, supertype) as ( select object_type, supertype from acs_object_types where object_type = coalesce(:object_type, (select object_type from acs_objects where object_id = :object_id)) union all select t.object_type, t.supertype from acs_object_types t, object_hierarchy s where t.object_type = s.supertype ) select distinct callback, callback_type as type from subsite_callbacks where event_type = :event_type and object_type in (select object_type from object_hierarchy)