2

我有一个USER_ROLES在 Oracle 10g 中命名的表,如下所示。

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(而不是基于此表中的所有行)。


以下 SQLUSER_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 添加到内部查询。user_id如果您希望 row_num 是 per (如果不忽略该位),我认为您还想对该分析进行分区:

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 回答