2

USER_ROLESOracle10gで次のような名前のテーブルがあります。

USER_ROLE_ID        USER_ID    AUTHORITY

28                  2          ROLE_ADMIN
45                  3          ROLE_USER
61                  3          ROLE_ASSISTANT
27                  3          ROLE_SUPERVISOR

USER_IDテーブルの外部キーはどこにありますかUSER_TABLE。特定のユーザー()に関連付けられた行のグループから特定の行の行番号を知る必要があります(USER_IDこのテーブルのすべての行に基づくわけではありません)。


次のSQLは、このテーブルのすべての行にUSER_ROLE_ID基づいて、特定の(この場合は28)の行番号を取得します。

select row_num from 
(select row_number() over (order by user_role_id desc) as row_num, user_role_id 
from user_roles order by user_role_id desc)
where user_role_id=28

この場合、3が表示されます。


ただし、特定のユーザーにのみ関連付けられている行のグループから行番号を取得する必要があります。そのために、次のSQLを試してみると、

select row_num from 
(select row_number() over (order by user_role_id desc) as row_num, user_role_id 
from user_roles order by user_role_id desc)
where user_id=2 and user_role_id=28

この場合、私はWHEREからの句を変更しました

where user_role_id=28

where user_id=2 and user_role_id=28

次のエラーが発生します。

ORA-00904: "USER_ID": invalid identifier

では、このシナリオでは、特定のユーザーに関連付けられている行のみから行番号を取得する方法は何ですか?

4

1 に答える 1

3

user_idを内部クエリに追加するだけです。row_numをper user_id(そのビットを無視しない場合)にしたい場合は、その分析をパーティション化することも必要だと思います。

select row_num 
  from  (select row_number() over (partition by user_id 
                                   order by user_role_id desc) as row_num, 
                user_role_id, user_id
           from user_roles)
where user_role_id=28 and user_id = 2;
于 2013-03-21T12:19:38.207 に答える