2013-04-09 35 views
0

我是SQL的新手,並且在下面的查詢中遇到困難。我正在嘗試獲取與我的角色ID相同的用戶,但我不希望以下查詢返回我的名字(因此,我在使用AND條件時使用了u.id <> 0)。由於我是管理員用戶,我有多個ROLES(R1,R2和R3)分配給我。我希望查詢返回所有其他具有ROLE R1的用戶。由於子查詢,「列不明確定義..」錯誤。我的問題是 -由於子查詢引起的列定義錯誤

  1. 這個錯誤的解決方法是什麼?
  2. 我該如何吸引擁有相同角色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); 
+0

查詢的哪一行是錯誤消息指向? – 2013-04-09 22:23:45

回答

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

或這是否可以存在多個角色,(並且是OK)爲用戶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 
     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 
+0

感謝您的幫助,但我得到以下錯誤 - ORA-01427:單行子查詢返回多個行 我忘了提及我有多個ROLES(R1,R2和R3)分配給我。我希望其他用戶使用ROLE R1來顯示。抱歉缺乏信息。 – user2263807 2013-04-09 22:33:24

+0

這意味着有多個角色連接到UserId:0 ...要解決這個問題,您需要修改子查詢以僅返回其中一個RoleIds,或者修改Where子句,以便它說'... AND R.ID IN([subquery here])'我不確定哪個更適合您的業務目標是什麼......但請嘗試我建議的重寫... – 2013-04-09 22:42:28

相關問題