我是SQL的新手,在下面的查询中遇到了困难。我试图获取用户谁具有相同的角色id作为我的,但我不希望下面的查询返回我的名字(因此我使用的AND条件u.id<>0)。由于我是管理员用户,我有多个角色(R1, R2和R3)分配给我。我希望查询返回拥有ROLE R1的所有其他用户。由于子查询,出现"列定义不清…"错误。我的问题是-
- 这个错误的解决方案是什么?
- 我如何拉谁有相同的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