在Oracle中,我有一个包含3列的表:
issue_no | source_no | status
-------------------------------
1 A
2 A
3 B
issue_no
是唯一的,但没有status
值。
我有另一张桌子B,每个status
(source
}都有issue_no
:
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
并没有帮助我得到同样的错误。
答案 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中的工作方式不同?