问题描述
每次在T1.VALUE上处理事务时,我想更新TABLE1中的计数。问题TABLE2包含T1.VALUE不止一次,我想在T1.COUNT_VAL中设置该计数
UPDATE TABLE1 T1
SET
T1.COUNT_VAL = nvl(T1.COUNT_VAL,0) + 1
WHERE
T1.VALUE IN (
SELECT
T2.VALUE,ROW_NUMBER() OVER(PARTITION BY T2.ID ORDER BY T2.VALUE)
FROM
TABLE2 T2
WHERE
T2.VALUE_REF = 'HGV00005x'
ORDER BY T2.ID,T2.VALUE
);
我尝试了此操作,但出现如下错误
错误报告-
sql错误:ORA-00907:缺少右括号
00907. 00000-“缺少右括号”
*原因:
*动作:
解决方法
从子查询中删除最后一个ORDER BY
子句,
ORDER BY T2.ID,T2.VALUE
,
您需要返回通过ROW_NUMBER()
函数返回的第一个值,因此请在语句中用rn = 1
进行过滤。此外,您只需要从子查询中带入一列value
,因为在t1.value
运算符之前只有一列IN
作为对应对象:
UPDATE table1 t1
SET t1.count_val = NVL( t1.count_val,0 ) + 1
WHERE t1.value IN (
SELECT value
FROM
(
SELECT t2.*,ROW_NUMBER() OVER ( PARTITION BY t2.id ORDER BY t2.value )
AS rn
FROM table2 t2
WHERE t2.value_ref = 'HGV00005x'
)
WHERE rn = 1
)
实际上,由于子查询中的ORDER BY
而引起错误,即使它在那里可用,它也没有成功的目的,并且ORDER BY
已在{{1}中使用}功能。
您要使用匹配的T2.VALUE的计数更新(递增)T1.VAL_COUNT吗?
update t1
set val_count = nvl(val_count,0) + ( select count(*)
from t2
where t1.value = t2.value
and t2.value_ref = 'HGV00005x'
group by t2.value
)
正在db<>fiddle here上进行演示