2010-08-30 85 views
3
---------- 
User 
---------- 
user_ID(pk) 
UserEmail 

---------- 
Project_Account 
---------- 
actno 
actname 
projno 
projname 
ProjEmpID 
ProjEmpMGRID 

其中ProjEmpID,ProjEmpMGRID是user_id,ProjEmpMGRID可以爲null。 我需要查找useremail並顯示錶project_account。我需要查詢具有重複值的actNo。左外部加入子查詢?

我的查詢是這樣的:

select projno,projname,actno,actname, 
(select u.user_email as project_manager from project_account c left outer join users u 
    on u.user_id = c.ProjEmpID where actno='some no')as project_manager, 

    (select u.user_email as program_manager from project_account c left outer join users u 
     on u.user_id = c.ProjEmpMGRID where actno='someno') as program_manager 

     from project_account where actno='someno' 

該錯誤消息我得到了甲骨文:

ORA-01427單行子查詢返回 多行

由於我的子查詢返回多個電子郵件ID,我得到這個錯誤。正如我所說,行爲不是獨一無二的。我可以理解錯誤,但我無法弄清楚解決方案。我在子查詢中執行左外部連接,因爲可能在prog manager id中有空值。

任何幫助,將不勝感激。

回答

5

您遇到的錯誤是您的一個子查詢(針對project_manager或program_manager)根據您的條件給出多個ID。這種情況是有道理的,因爲多個項目帳戶可能具有相同的「actno」,因爲您沒有將此指定爲Primarky項(pk),而是使用子查詢直接加入到用戶表中找到標識

select projno,projname,actno,actname, 
    project_user.user_email as project_manager, 
    program_user.user_email as program_manager 
    from project_account 
    left join User as project_user 
     on project_account.ProjEmpID = project_user.user_id 
    left join User as program_user 
     on project_account.ProjEmpMGRID = program_user.user_id 

where actno='someno' 
+0

+1:打我給它 – 2010-08-30 19:43:14

+0

thanks.it工作。 – jero 2010-08-30 20:27:55

2

什麼是這樣的:

select c.projno, c.projname, c.actno, c.actname, u.user_email as project_manager, us.user_email as program_manager 

from project_account c 

left outer join users u 
on u.user_id = c.ProjEmpID 

left outer join users us 
on us.user_id = c.ProjEmpMGRID 

WHERE actno = 'someno' 

這樣,你沒有運行子查詢和返回多個結果,並試圖將它們存儲爲一個值。

0

你爲什麼不簡單地使用它?

select projno, projname, actno, actname, (select user_email from users where user_id = pa.projempid), (select user_email from users where user_id = pa.projempmgrid) from project_account pa