チケット テーブル、ユーザー テーブル、ロール テーブル、および role_mapping テーブルがあるとします。チケットはユーザーが所有します。ユーザーは、1 つまたは複数のロールを持つことができます。roles テーブルはロールを定義し、role_mapping テーブルはユーザーをそのロールにマップします (ロールは基本的にパーミッションです)。だから私がしたいのは、ユーザー、チケット、およびロールマッピングをそのまま結合することです(Oracle SQL):
SELECT t.ticket_id, u.user_id, rm.role_id
FROM tickets t
JOIN users u on u.user_id = t.user_id
JOIN role_mappings rm on rm.user_id = u.user_id
WHERE ...
したがって、これはもちろん、特定のユーザーが複数のロールを持っている場合、同じ ticket_id を持つ複数の行を生成します。私が望むのは、role_idが「102」の場合、値が「102」の行を1つだけ生成することです。それ以外の場合は、特定のユーザーが持つ最大の役割値に対応する行を1つだけ生成します。つまり、ユーザーがrole_id 101,102,105を持っている場合は、102を選択、ただし 101,105 の場合は 105 を選択します。
これはどのように達成できますか?