由于子查询,列模糊地定义了错误

时间:2013-04-09 22:19:29

标签: sql oracle oracle10g oracle11g

我是SQL的新手,在下面的查询中遇到困难。我正在尝试获取与我的角色ID相同的用户,但我不希望以下查询返回我的名字(因此我在AND条件中使用了u.id<> 0)。由于我是管理员用户,我有多个ROLES(R1,R2和R3)分配给我。我希望查询返回具有ROLE R1的所有其他用户。由于子查询,“列模糊定义..”错误即将发生。我的问题是 -

  1. 此错误的解决方法是什么?
  2. 如何提取与我具有相同role_id的用户?谁能告诉我正确的查询?
  3. 提前致谢。

    SELECT DISTINCT U.FIRST_NAME || ' ' || U.LAST_NAME AS USER_NAME,
        U.PHONE AS PHONE,
        U.EMAIL AS USER_EMAIL FROM USERS U
        INNER JOIN USR_ORG_DOM_ROLE_RELATIONS UODR ON U.ID=UODR.USER_ID
        INNER JOIN ROLES R ON R.ID=UODR.ROLE_ID
        WHERE
        U.DELETED='N'
        AND U.DISABLED='N'
        AND U.ID<>0
        AND R.ID=(SELECT ID FROM ROLES R 
        INNER JOIN USR_ORG_DOM_ROLE_RELATIONS UODR ON R.ID=UODR.ROLE_ID
        INNER JOIN USERS U ON U.ID=UODR.USER_ID
        WHERE U.ID=0);
    

1 个答案:

答案 0 :(得分:0)

子查询中的

ID需要一个表别名...

此外,您不能在两个不同的表引用上使用相同的别名。即使它们在两个不同的地方是同一张桌子。试试这个:

 Select Distinct u.FIRST_NAME || ' ' || u.LAST_NAME USER_NAME,
      u.PHONE, u.EMAIL USER_EMAIL 
 From Users u
    Join USR_ORG_DOM_ROLE_RELATIONS uodr
       On u.ID = uodr.USER_ID
    Join ROLES r 
       On r.ID = uodr.ROLE_ID
 Where u.DELETED='N'
    AND u.DISABLED='N'
    AND u.ID<>0
    AND r.ID = 
       (SELECT iR.ID FROM ROLES iR 
          JOIN USR_ORG_DOM_ROLE_RELATIONS iUODR 
             ON iR.ID=iUODR.ROLE_ID
          JOIN USERS iU 
             ON iU.ID=iUODR.USER_ID
        WHERE iU.ID=0);

或者如果UserId = 0

,可以存在多个角色(并且没问题)
 Select Distinct u.FIRST_NAME || ' ' || u.LAST_NAME USER_NAME,
      u.PHONE, u.EMAIL USER_EMAIL 
 From Users u
    Join USR_ORG_DOM_ROLE_RELATIONS uodr
       On u.ID = uodr.USER_ID
    Join ROLES r 
       On r.ID = uodr.ROLE_ID
 Where u.DELETED='N'
    AND u.DISABLED='N'
    AND u.ID<>0
    AND r.ID In 
       (SELECT iR.ID FROM ROLES iR 
          JOIN USR_ORG_DOM_ROLE_RELATIONS iUODR 
             ON iR.ID=iUODR.ROLE_ID
          JOIN USERS iU 
             ON iU.ID=iUODR.USER_ID
        WHERE iU.ID=0);

但我认为这与以下内容相同:

 Select Distinct u.FIRST_NAME || ' ' || u.LAST_NAME USER_NAME,
      u.PHONE, u.EMAIL USER_EMAIL 
 From Users u
    Join USR_ORG_DOM_ROLE_RELATIONS uodr
       On u.ID = uodr.USER_ID
    Join (Roles r Join USR_ORG_DOM_ROLE iuodr 
             On iuodr.Role_Id = r.Id
                And iuodr.UserId = 0)
        On r.ID = uodr.ROLE_ID
 Where u.DELETED='N'
    And u.DISABLED='N'
    And u.ID<>0
相关问题