使用sqlplus上的Having Count子句创建Update语句

时间:2014-03-27 15:28:32

标签: sql oracle count sqlplus having

我想从使用HAVING COUNT

的select语句创建更新查询

这是选择查询:

select hlse_ref, HLSE_TERM_START_DATE, HLSE_STATUS_CODE
from headleas a, lernhist b
where a.hlse_ref=b.lerh_leas_hlse_ref
and a.HLSE_TERM_START_DATE is not null
group by a.hlse_ref, a.HLSE_STATUS_CODE, a.HLSE_TERM_START_DATE
having count(b.LERH_START_DATE)=1

我想将hlse_term_start_date设置为null,条件符合我的select语句

update headleas
set hlse_term_start_date=null
where( *my select statement*)

但这似乎不起作用。我看过其他帖子,但对这个案子没什么帮助。我正在使用SQL Plus。任何想法的家伙?

2 个答案:

答案 0 :(得分:1)

我没有尝试构建的逻辑,但可能会有所帮助

使用像

这样的exists子句
update headless outer
set hlse_term_start_date=null
where exists ( select 1 from headleas a, lernhist b
where a.hlse_ref=b.lerh_leas_hlse_ref
and a.HLSE_TERM_START_DATE is not null
and outer.hlse_ref = a.hlse_ref
group by a.hlse_ref, a.HLSE_STATUS_CODE, a.HLSE_TERM_START_DATE
having count(b.LERH_START_DATE)=1 
)

比较where子句中的子查询计数,如

update headless outer
set hlse_term_start_date=null
where 1= (
select count(b.LERH_START_DATE)
from headleas a, lernhist b
where a.hlse_ref=b.lerh_leas_hlse_ref
and a.HLSE_TERM_START_DATE is not null
and a.hlse_ref = outer.hlse_ref
group by a.hlse_ref, a.HLSE_STATUS_CODE, a.HLSE_TERM_START_DATE
)

答案 1 :(得分:0)

究竟是什么条件应该是什么?您提供的示例不是正确的语法。

update table_b b
set b.col1 = null
where (select col2 from table_a a) --incorrect

这不是一个条件;它没有评估为真或假。你的意思是使用“存在的地方”吗?还是其他一些条件?如果使用“where exists”,则必须使用某个键值将select语句与更新的表相关联,这可能是HEADLEAS的主键。