Hier ist eine Abfrage, die die beiden obigen Abfragen naiv kombiniert, also stellen Sie sicher, dass Sie die Ausgaben der beiden Methoden überprüfen und vergleichen.
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;
Es ist nicht erforderlich, eine temporäre Tabelle zu verwenden und anschließend Datensätze zu löschen, um die erforderlichen Ergebnisse zu erhalten. Obwohl es vielleicht einen Grund für seine Verwendung gegeben hat, vielleicht die Leistung?
Außerdem sieht es aus wie die Abfrage und der Beitritt zum USER
Tabelle ist als USER_ID
unnötig ist unter USER_ROLES
verfügbar . Ich habe es in der obigen Abfrage weggelassen. Hoffentlich gibt Ihnen das einen guten Start, um es zu verbessern.