首页 > 解决方案 > Oracle SQL更新语句如何一次更新两行

问题描述

我试图更新表中的两行。如果我使用:

update ERNTESTUPDATE a
set (date_loaded, acad_career) = (select distinct b.date_loaded, b.acad_career
from PS_STDNT_ENRL b
where rownum=1)
where to_char(date_created) = to_char(trunc(sysdate))
; 

我有 2 行更新为

11/29/18 UGRD
11/29/18 UGRD

如果我使用:

update ERNTESTUPDATE a
set (date_loaded, acad_career) = (select distinct b.date_loaded, b.acad_career
from PS_STDNT_ENRL b
where a.date_loaded = b.date_loaded )
where to_char(date_created) = to_char(trunc(sysdate))
;

我有一个错误

单行子查询返回多于一行

如何得到如下结果:

11/29/18 UGRD
11/29/18 GRAD

谢谢你,凯特

标签: sqloracleoracle11g

解决方案


子查询需要返回单行。当您rownum=1在第一个条件中包含条件时,效果很好:

select distinct b.date_loaded, b.acad_career
from PS_STDNT_ENRL b 
where rownum=1 -- this filter makes sure only one row is returned

如果删除该条件,则子查询将返回多行,这会使整个查询UPDATE失败。


推荐阅读