加入3个视图需要帮助

时间:2015-02-02 21:33:07

标签: sql join

我想在sql中加入3个视图。 这是我的代码:

select v1.grantee, v1.privilege, granted_role, v3.privilege, table_name 
from dba_sys_privs v1, dba_role_privs v2 , dba_tab_privs v3 
where v1.grantee=v2.grantee and v1.grantee=v3.grantee and v1.grantee='USER1';

我的问题是当dba_tab_privs或dba_role_privs不包含被授权者是user1的任何行时,结果将是0行,所以我需要的是在grant_role和v3.privilege和table_name列中显示带有空格的结果案件。 我也试过这段代码:

select utilisateur, Sys_privs, Role, Obj_privs, table_name
from
(select grantee as utilisateur, privilege as Sys_privs from dba_sys_privs where grantee='USER1'),
(select granted_role as Role from dba_role_privs where grantee='USER1'),
(select privilege as Obj_privs, table_name from dba_tab_privs where grantee='USER1');

但不幸的是,结果也是零行。

1 个答案:

答案 0 :(得分:1)

您正在使用不推荐使用的语法来加入,更新这些语法,并使用LEFT JOIN不排除结果集中的记录,而这些记录在所有三个表中都不存在:

SELECT v1.grantee, v1.privilege, granted_role, v3.privilege, table_name 
FROM dba_sys_privs v1
LEFT JOIN dba_role_privs v2 
  ON v1.grantee=v2.grantee
LEFT JOIN dba_tab_privs v3 
  ON v1.grantee=v3.grantee
WHERE v1.grantee='USER1';

编辑:根据spencer7593的评论,如果他们提及的是Oracle系统目录视图,那么您的JOIN条件可能不完整/不合逻辑。