簡體   English   中英

左外連接子查詢?

[英]Left Outer Join with subqueries?

----------
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'

我在Oracle中收到的錯誤消息:

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

當我的子查詢返回多個電子郵件ID時,我收到此錯誤。 正如我所說,行為不是不唯一的。 我能理解錯誤,但我無法弄清楚解決方案。 我在子查詢中執行左外連接,因為prog manager id中可能有空值。

任何幫助,將不勝感激。

您得到的錯誤是您的一個子查詢(對於project_manager或program_manager)根據您的條件為您提供了多個ID。 這是有道理的,因為多個項目帳戶可能具有相同的“actno”,因為您沒有將其指定為Primarky Key(pk)

而不是使用子查詢,只需直接連接到用戶表以查找ID

 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'

怎么樣的:

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'

這樣,您就不會運行子查詢並返回多個結果並嘗試將它們存儲為一個值。

你為什么不簡單地使用它?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM