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'

Oracleで表示されるエラーメッセージ:

ora-01427単一行サブクエリは複数の行を返します

サブクエリが複数の電子メールIDを返すため、このエラーが発生します。私が言ったように、行為はユニークではありません。エラーは理解できましたが、解決策がわかりませんでした。prog manager idにnullが含まれている可能性があるため、サブクエリで左外部結合を実行しています。

どんな助けでもいただければ幸いです。

4

3 に答える 3

5

発生しているエラーは、サブクエリの 1 つ (project_manager または program_manager のいずれか) が、条件に基づいて複数の ID を返していることです。主キー (pk) として指定していないため、複数のプロジェクト アカウントが同じ「actno」を持つ可能性があるため、この種のことは理にかなっています。

さらに、サブクエリを使用するのではなく、ユーザー テーブルに直接結合して 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'
于 2010-08-30T19:41:53.333 に答える
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'

この方法では、サブクエリを実行せず、複数の結果を返し、それらを 1 つの値として保存しようとします。

于 2010-08-30T19:43:15.883 に答える
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

于 2013-08-12T15:14:47.100 に答える