【问题标题】:group two tables result without duplicate results将两个表结果分组,没有重复的结果
【发布时间】:2016-01-29 16:21:09
【问题描述】:

我正在尝试从两个不同的表中为特定用户获取角色和权限。我的查询是这样的:

Select r.grantee, r.granted_role , s.privilege 
From dba_role_privs r, dba_sys_privs s 
Where r.grantee=s.grantee and r.grantee=(select username from dba_users where username='HR'); 

我的结局是这样的:

GRANTEE    GRANTED_ROLE         PRIVILEGE
---------- -------------------- --------------------
HR         DBA                  CREATE VIEW
HR         RESOURCE             CREATE VIEW
HR         DBA                  UNLIMITED TABLESPACE
HR         RESOURCE             UNLIMITED TABLESPACE
HR         DBA                  CREATE DATABASE LINK
HR         RESOURCE             CREATE DATABASE LINK
HR         DBA                  CREATE SEQUENCE
HR         RESOURCE             CREATE SEQUENCE
HR         DBA                  CREATE SESSION
HR         RESOURCE             CREATE SESSION
HR         DBA                  ALTER SESSION

GRANTEE    GRANTED_ROLE         PRIVILEGE
---------- -------------------- --------------------
HR         RESOURCE             ALTER SESSION
HR         DBA                  CREATE SYNONYM
HR         RESOURCE             CREATE SYNONYM

14 rows selected.

当用户没有很多角色/权限时这很好,但是对于像 SYS 这样的用户,例如,我最终会得到10600 rows selected.

有没有办法让查询结果更好?我错过了加入吗?

PS:我正在开发 oracle 11g。

如果您可以帮助改进它,请这样做

提前致谢!

【问题讨论】:

    标签: sql oracle database-administration sysdba


    【解决方案1】:

    也许您想要union all 而不是加入:

    Select r.grantee, r.granted_role as role_or_privilege
    From dba_role_privs r, 
    Where r.grantee = (select username from dba_users where username = 'HR'); 
    union all
    select s.grantee, s.privilege 
    from dba_sys_privs s 
    Where s.grantee = (select username from dba_users where username = 'HR'); 
    

    我将where 中的逻辑与您的查询中的逻辑相同。但是,这对我来说更有意义:

    Select r.grantee, r.granted_role as role_or_privilege
    From dba_role_privs r, 
    Where r.grantee = 'HR'; 
    union all
    select s.grantee, s.privilege 
    from dba_sys_privs s 
    Where s.grantee = 'HR'; 
    

    【讨论】:

    • 我理解 where 句子的变化并且有意义。我在一列中得到结果是否有可能以某种方式在两列中得到它们而没有半重复?
    • @MajdAlsheikh 。 . .或许你应该问另一个问题,并且非常清楚你想要的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2015-10-25
    • 2018-04-04
    相关资源
    最近更新 更多