子查询返回多行错误

时间:2016-05-19 00:10:57

标签: sql oracle

在Oracle中,我有一个包含3列的表:

表-A

issue_no | source_no | status 
-------------------------------
1           A
2           A
3           B

issue_no是唯一的,但没有status值。

我有另一张桌子B,每个statussource}都有issue_no

表-B

source_no  | status
-------------------
A            Complete
B            Progress

我想使用Table_B中的status更新Table_A中的status列。看似很容易,但是当我执行时:

update Table_A a
  set status  = (select status
                   from Table_B b
                   where a.source_no = b.source_no )
  where exists (select *
                  from Table_B b
                  where a.source_no = b.souce_no)

我收到一个错误,即子查询确实返回多行但无法更新。我怎样才能解决这个错误?使用distinct并没有帮助我得到同样的错误。

1 个答案:

答案 0 :(得分:0)

update table_A
   set status = b.status
from table_A a
     inner join table_B b on a.source_no = b.source_no

这是标准结构。

使用完整样本进行更新:

create table #table_a(issue_no int, source_no char, status varchar(10))
insert #table_a(issue_no,source_no) values (1,'A'),(2,'A'),(3,'B')
create table #table_b(source_no char,status varchar(10))
insert #table_b values ('A','Complete'),('B','Progress')
select * from #table_a
select * from #table_b

update #table_A
   set status = b.status
from #table_A a
     inner join #table_B b on a.source_no = b.source_no
select * from #table_a

最后选择:

issue_no    source_no   status
1   A   Complete
2   A   Complete
3   B   Progress

什么行不遵循ANSI 92或在Oracle中的工作方式不同?