如果出现重复行:ORA-01427:单行子查询返回多行

时间:2013-06-05 10:21:38

标签: sql plsql

我得到了这三张桌子,a和p。 a和s有1:1的关系。但是a到p得到1:x的关系。 我当前的查询仅针对1:0或1:1关系构建。 目前我得到:“ORA-01427:单行子查询返回多行。”如果activity_no有多个resource_id

那么我该如何重做我的查询呢?如果有一个activity_id有两个或更多个resource_id,我想要将所选行复制两次或更多次,具体取决于activity_no有多少resource_id?

我一直在寻找:Oracle, insert multirows from subquery with more than one row但它不起作用。

    select s.sub_project_id,  
           a.activity_no,
           (select p.resource_id
            from p
            where p.project_id = 'PROPSTOT'
            and p.activity_seq = a.activity_seq,                                     
from s,
     a
where s.sub_project_id = a.sub_project_id
      and s.project_id = 'PROPSTOT' 
      and a.project_id = 'PROPSTOT'

2 个答案:

答案 0 :(得分:2)

尝试加入查询中的表格,如下所示:

select s.sub_project_id,  
       a.activity_no,
       p.resource_id
from s
join a on s.sub_project_id = a.sub_project_id and a.project_id = 'PROPSTOT'
left join p on p.project_id = 'PROPSTOT' and p.activity_seq = a.activity_seq
where s.project_id = 'PROPSTOT' 

答案 1 :(得分:1)

我不清楚你究竟想要做什么,但从你的描述中听起来你似乎想要一个加入:

select s.sub_project_id,  
       a.activity_no,
       p.resource_id
from s 
   join a on s.sub_project_id = a.sub_project_id and a.project_id = s.project_id
   left outer join p on p.activity_seq = a.activity_seq
where s.project_id = 'PROPSTOT'