需要帮助加入 3 个视图

need help in joining 3 views

我想在 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 行,所以我需要用空 [= 显示结果在这种情况下,granted_role 和 v3.privilege 和 table_name 列中的 23=]。 我也试过这段代码:

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');

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

您正在使用已弃用的语法来连接、更新这些语法,并使用 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 标准可能是 incomplete/illogical。