吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1367|回复: 8
收起左侧

[讨论] oracle数据库,update更新的一个问题

[复制链接]
yk156511 发表于 2022-12-21 10:15

假设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就会多对一,返回多个行错误,(如图).
[9TR35905{BGM2LFQMNIONN.png
这种情况下怎么维护。有没有大佬给个语句。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
shiningkaka + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ygh0309 发表于 2022-12-21 10:45
https://blog.csdn.net/weixin_44657888/article/details/124591434   

merge into 可以处理你这个问题
ly765893958 发表于 2022-12-21 11:50
本帖最后由 ly765893958 于 2022-12-21 13:44 编辑

子查询里where条件没有将数据过滤成单条,如果确定存在这种情况的话,可以考虑where条件里加一个and rownum = 1,或者在子查询的select后面加一个distinct,就可以解决这个问题了!
ly765893958 发表于 2022-12-21 11:51
ygh0309 发表于 2022-12-21 10:45
https://blog.csdn.net/weixin_44657888/article/details/124591434   

merge into 可以处理你这个问题

别带偏了 楼主这很明显是子查询的where条件写的有问题  很常见的一个报错了
pojie2001 发表于 2022-12-21 11:53
select  max(djkid) from bdc_regn_zb  
第二行的djkid  加聚合函数max  或min 或者 dintinct 去重

你逻辑没错误的话以上三种结果相同
溯雪 发表于 2022-12-21 11:54
distinct
ygh0309 发表于 2022-12-21 13:24
ly765893958 发表于 2022-12-21 11:51
别带偏了 楼主这很明显是子查询的where条件写的有问题  很常见的一个报错了

尬住,还得老哥你
ly765893958 发表于 2022-12-21 13:44
ygh0309 发表于 2022-12-21 13:24
尬住,还得老哥你

我也是用的多了
石淞元 发表于 2022-12-21 17:21
添加一个where条件将一对多数据帅选出来单独处理,看看一对多你什么原因照成的;第二种方法就是添加limit 1取中一个就可以
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表