Đây là một truy vấn kết hợp nguyên bản hai truy vấn trên, vì vậy hãy đảm bảo rằng bạn kiểm tra và so sánh kết quả đầu ra từ hai phương pháp.
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;
Không nhất thiết phải sử dụng một bảng tạm thời và sau đó xóa các bản ghi sau đó để có được kết quả cần thiết. Mặc dù, có thể có một lý do cho việc sử dụng nó, có thể là hiệu suất?
Ngoài ra, nó trông giống như truy vấn và tham gia vào USER
bảng là không cần thiết vì USER_ID
có sẵn từ USER_ROLES
. Tôi đã bỏ qua nó khỏi truy vấn ở trên. Hy vọng rằng điều đó mang lại cho bạn một khởi đầu tốt để cải thiện nó.