postgresql9.0 select g.group_id, g.group_name from ( select DISTINCT g.group_id, g.group_name from (select group_id, group_name from groups g, acs_objects o where g.group_id = o.object_id and o.object_type = :group_type) g, application_group_element_map m where m.package_id = :package_id and m.element_id = g.group_id and acs_permission.permission_p(g.group_id, :user_id, 'read') ) g order by lower(g.group_name)