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