oracle数据库,update更新的一个问题
假设A表有slid列 bdcdyh列。 本来是根据A表的slid和bdcdyh列相等进行维护。 语句如下
update bdc_qlrlb a set dyid =
(select djkid from bdc_regn_zb b where a.slid=b.slid and a.bdcdyh=b.bdcdyh and b.djkid is not null)
where exists (select 1 from bdc_regn_zb b where a.slid=b.slid and a.bdcdyh=b.bdcdyh and b.djkid is not null) and dyid is null and bz=0。
但是现在A表其余字段为空,只有一个slid列有值。只根据slid就会多对一,返回多个行错误,(如图).
这种情况下怎么维护。有没有大佬给个语句。 https://blog.csdn.net/weixin_44657888/article/details/124591434
merge into 可以处理你这个问题 本帖最后由 ly765893958 于 2022-12-21 13:44 编辑
子查询里where条件没有将数据过滤成单条,如果确定存在这种情况的话,可以考虑where条件里加一个and rownum = 1,或者在子查询的select后面加一个distinct,就可以解决这个问题了!{:301_1007:} ygh0309 发表于 2022-12-21 10:45
https://blog.csdn.net/weixin_44657888/article/details/124591434
merge into 可以处理你这个问题
别带偏了 楼主这很明显是子查询的where条件写的有问题很常见的一个报错了 {:301_1004:} selectmax(djkid) from bdc_regn_zb
第二行的djkid加聚合函数max或min 或者 dintinct 去重
你逻辑没错误的话以上三种结果相同 distinct ly765893958 发表于 2022-12-21 11:51
别带偏了 楼主这很明显是子查询的where条件写的有问题很常见的一个报错了
尬住,还得老哥你 ygh0309 发表于 2022-12-21 13:24
尬住,还得老哥你
我也是用的多了{:301_1004:} 添加一个where条件将一对多数据帅选出来单独处理,看看一对多你什么原因照成的;第二种方法就是添加limit 1取中一个就可以
页:
[1]