Zde je dotaz, který naivně kombinuje dva výše uvedené dotazy, takže se ujistěte, že zkontrolujete a porovnáte výstupy z těchto dvou metod.
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;
Pro získání požadovaných výsledků není nutné používat dočasnou tabulku a poté záznamy mazat. I když pro jeho použití mohl být důvod, možná výkon?
Také to vypadá jako dotaz a připojení k USER
tabulka je zbytečná jako USER_ID
je k dispozici od USER_ROLES
. Z výše uvedeného dotazu jsem to vynechal. Doufejme, že vám to poskytne dobrý začátek k jeho vylepšování.