由于子查询导致的列定义不清错误



我是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);

子查询中的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

最新更新