Her er en forespørgsel, som naivt kombinerer de to forespørgsler ovenfor, så sørg for at kontrollere og sammenligne output fra de to metoder.
select
r.user_id, r.role_id, r.participant_code, max(status_id)
from
user_role r,
cmp_role c
where
r.role_id = c.role_id
and r.active in (0,1,3)
and r.participant_code is not null
and sysdate between r.effective_from_date and r.effective_to_date
and c.group_id = 3
group by
r.user_id, r.role_id, r.participant_code;
Det er ikke nødvendigt at bruge en midlertidig tabel og derefter slette poster bagefter for at få de ønskede resultater. Selvom der kan have været en grund til dets brug, måske ydeevne?
Det ligner også forespørgslen og join til USER
tabel er unødvendig som USER_ID
er tilgængelig fra USER_ROLES
. Jeg har udeladt det fra forespørgslen ovenfor. Forhåbentlig giver det dig en god start til at forbedre det.