最近机构改革,单位裁员,我是新手,老板今天突然写了一个access的查询语句来问我,让我用oracle环境下实现与access查询语句相同,我晕,问了我的几个哥们,他们都不行,谁能尽快帮我???表结构如下:                        字段名称user_table(用户表)             序号         姓名
role_table(角色表)            角色代码  角色名称
user_role(用户与角色对应表)    用户       角色 
老板的access语句如下: SELECT 角色代码  ,   
         角色名称 ,   
         iif(isnull(用户),1,0) as checked
    FROM (select * from user_role where 用户 = :userno) as user_role RIGHT JOIN role_talbe ON user_role.角色 = role_talbe.角色代码  老板让我写oracle下的sql语句替换上述的access下的sql语句,操他妈,存心难为我,请问大家谁能帮帮我?

解决方案 »

  1.   

    select 角色代码,角色名称,nvl(用户,1,0) checked
    from (select * from user_role where 用户=:userno) user_role,role_table
    where user_role.角色(+) = role_table.角色代码oralce的版本支持非标准sql的(+),所以可以这么写。select 角色代码,角色名称,nvl(用户,1,0) checked
    from (select * from user_role where 用户=:userno) user_role right join role_table 
    on user_role.角色 = role_talbe.角色代码 oracle 9以后的,也可以用标准的sql写.
      

  2.   

    select role_table.角色代码,role_table.角色名称,decode(user_role.用户,null,1,0) checked
    from (select * from user_role where 用户=&userno) user_role,role_table
    where user_role.角色(+) = role_talbe.角色代码
      

  3.   

    SELECT 角色代码  ,   
             角色名称 ,   
             decode(用户,null,1,0) as checked
        FROM (select * from user_role where 用户 = :userno) as user_role RIGHT JOIN role_talbe ON user_role.角色 = role_talbe.角色代码几乎都是差不多的但是我不太清楚ACCESS的IIF
      

  4.   

    iif(isnull(用户),1,0) as checked用户  为null  取 1
          else    取 0
      

  5.   

    select 角色代码,角色名称,nvl(用户,1,0) checked
    from (select * from user_role where 用户=&userno) user_role right join role_table 
    on user_role.角色 = role_talbe.角色代码
      

  6.   

    IIf
    返回由逻辑测试确定的两个数值或字符串值之一。语法
    数字
    IIf(«Logical Expression», «Numeric Expression1», «Numeric Expression2»)如果 «Logical Expression» 取值为 TRUE,则此函数返回 «Numeric Expression1»,否则,返回 «Numeric Expression2»。字符串
    IIf(«Logical Expression», «String Expression1», «String Expression2»)如果 «Logical Expression» 取值为 TRUE,则此函数返回 «String Expression1»,否则,返回 «String Expression2»。注释
    只有当 «Logical Expression» 的值为零时,才认为该表达式是 FALSE。任何其它值都被解释为 TRUE。不推荐用 Iif 函数基于搜索条件创建成员的集合。请改用 Filter 函数根据逻辑表达式评估指定集合中的每个成员,然后返回成员的子集合。示例
    数字
    如果 Measures.CurrentMember 是空单元,则下面的示例返回 0,否则返回 1:IIf(IsEmpty(Measures.CurrentMember), 0, 1)字符串
    如果 Measures.CurrentMember 是空单元,则下面的字符串返回字符串 "Yes",否则返回字符串 "No":IIf(IsEmpty(Measures.CurrentMember), "Yes", "No")
      

  7.   

    我用的是ORACLE8.17请问该怎么写?
      

  8.   

    我用的是ORACLE8。17请问语句该怎么写???????????
      

  9.   

    nvl(用户,1,0)   。
    这能行么。。nvl只有两个参数好么
    只能用decode用户=:userno  改成  用户=&userno  是什么意思?
      

  10.   

    8i里RIGHT JOIN就不可以使用了 用+,其他的不变
      

  11.   

    8中外连接如hongqi162(失踪的月亮) 所说select 角色代码,角色名称,nvl(用户,1,0) checked
    from (select * from user_role where 用户=&userno) user_role,role_table
    where user_role.角色(+) = role_table.角色代码