Hier is een zoekopdracht die de twee bovenstaande zoekopdrachten naïef combineert, dus zorg ervoor dat u de resultaten van de twee methoden controleert en vergelijkt.
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;
Het is niet nodig om een tijdelijke tabel te gebruiken en daarna records te verwijderen om de vereiste resultaten te krijgen. Hoewel er misschien een reden was voor het gebruik ervan, misschien prestaties?
Het lijkt ook op de zoekopdracht en voeg u bij de USER
tabel is niet nodig omdat de USER_ID
is verkrijgbaar bij USER_ROLES
. Ik heb het weggelaten uit de bovenstaande query. Hopelijk geeft dat je een goed begin om het te verbeteren.