Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于与第二个表的比较向SQL结果集中添加布尔列_Sql_Oracle_Boolean_Jdeveloper - Fatal编程技术网

如何基于与第二个表的比较向SQL结果集中添加布尔列

如何基于与第二个表的比较向SQL结果集中添加布尔列,sql,oracle,boolean,jdeveloper,Sql,Oracle,Boolean,Jdeveloper,基本上我已经回答了问题的第一部分,这是我到目前为止的SQL语句 SELECT DbaRolePrivs.GRANTEE, DbaRolePrivs.GRANTED_ROLE, ApplicationRoleDefinition.ROLE, ApplicationRoledefinition.description_tx, CASE WHEN GRANTED_ROLE = ROLE AND GRANTEE = USERNA

基本上我已经回答了问题的第一部分,这是我到目前为止的SQL语句

SELECT DbaRolePrivs.GRANTEE,
       DbaRolePrivs.GRANTED_ROLE,
       ApplicationRoleDefinition.ROLE,
       ApplicationRoledefinition.description_tx, 
       CASE
         WHEN GRANTED_ROLE = ROLE AND GRANTEE = USERNAME THEN
           'T'
         ELSE
           'F'
       END AS checkMark
FROM DBA_ROLE_PRIVS DbaRolePrivs, APPLICATION_ROLE_DEFINITION ApplicationRoleDefinition
以下是我试图用通俗易懂的英语表达的逻辑

给定所有角色及其描述的列表,根据当前选定的用户名是否已根据其自己的GrantedRoles列表授予该角色,将每个角色标记为TRUE或FALSE

现在它当然返回一个双重列表,因为“case-when”部分将每个授予的角色与角色的总列表进行比较。(我之所以说复制,是因为测试用户只有两个角色,在当前SQL查询中,对于每个可能的角色,它将为每个授予的角色返回一行

我几乎没有用SQL工作,所以我更习惯于C++、ObjuleC等。实际上,我需要的是“案例时”部分,是检查GraveType角色列中是否存在当前角色。我已经看到了存在函数,但它似乎只针对诸如“哪里存在”的结果集< /P>。


提前感谢,我知道这对于经常使用数据库的人来说可能很简单,我才刚刚开始。

您需要进行外部联接,然后测试联接是否成功。如果外部联接失败,仍然会返回一行,但所有
dbarolepriv
列都将为空

SELECT  DbaRolePrivs.GRANTEE,
        DbaRolePrivs.GRANTED_ROLE,
        ApplicationRoleDefinition.ROLE,
        ApplicationRoledefinition.description_tx,
        NVL2( DbaRolePrivs.GRANTED_ROLE, 'T', 'F' ) AS checkMark
FROM    DBA_ROLE_PRIVS DbaRolePrivs
    ,   APPLICATION_ROLE_DEFINITION ApplicationRoleDefinition
WHERE   ApplicationRoleDefinition.ROLE = DbaRolePrivs.GRANTED_ROLE (+)
AND     USERNAME                       = DbaRolePrivs.GRANTEE      (+)

'T'
'F'
不是真正的布尔值…@Matt Ball:它们是标准SQL-92中所能达到的最好的。可以说SQL-99的
布尔值类型也不是真正的布尔值:使用SQL的三值逻辑,所有的赌注都是无效的。