0

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

  1. 这个错误的解决方法是什么?
  2. 如何拉取与我具有相同 role_id 的用户?谁能告诉我正确的查询?

提前致谢。

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

1 回答 1

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
于 2013-04-09T22:28:33.380 回答