Sql 匹配时更新不工作oracle合并
这里有一些有趣的东西!Sql 匹配时更新不工作oracle合并,sql,oracle,insert-update,on-duplicate-key,Sql,Oracle,Insert Update,On Duplicate Key,这里有一些有趣的东西!merge语句工作正常。但当值匹配时,它不会按预期将状态更新为“B”。知道为什么吗 merge into bbbt b using (select bank,ifsc,branch, center,district,state, address,status from rtgbrn_temp where ifsc in (SELECT ifsc
merge
语句工作正常。但当值匹配时,它不会按预期将状态更新为“B”。知道为什么吗
merge into bbbt b
using (select bank,ifsc,branch,
center,district,state,
address,status
from rtgbrn_temp
where ifsc in (SELECT ifsc
FROM rtgbrn_temp
MINUS
SELECT ifsc_code
FROM bbbt)
) x
on (x.ifsc = b.ifsc_code)
when matched then
update
set rtgs_stat = 'B'
where (x.ifsc=b.ifsc_code)
when not matched then
insert (bankid,benbrn_code,brn_name,
brn_addr,brn_loc,brn_stat,
brn_city,coun_code,
remarks,ifsc_code,
rtgs_stat)
values (substr(x.ifsc,1,4), substr(x.ifsc,5),
x.branch, x.address, x.district,
x.state, x.center,'IN', x.bank, x.ifsc,'R');
[还尝试在重复更新时使用,但因错误而无法工作]
SQL Error: ORA-00933: SQL command not properly ended!
insert into bbbt(bankid,benbrn_code,brn_name,brn_addr,brn_loc,brn_stat,brn_city,coun_code,remarks,ifsc_code,rtgs_stat)
select substr(x.ifsc,1,4), substr(x.ifsc,5), x.branch, x.address, x.district, x.state, x.center,'IN', x.bank, x.ifsc,'R' from
(select bank,ifsc,branch,center,district,state,address,status from rtgbrn_temp where ifsc in (SELECT ifsc FROM rtgbrn_temp MINUS SELECT ifsc_code FROM bbbt))x
ON DUPLICATE KEY UPDATE rtgs_stat = 'B';
请分享你的知识,谢谢 查询中的值无法匹配。
请仔细查看查询的这一部分
select ..., ifsc, .....
from rtgbrn_temp
where ifsc in (........
.........
MINUS
SELECT ifsc_code
FROM bbbt )
此查询检索bbbt
表中不等于任何ifsc\u代码的ifsc
代码。
然后查询使用以下代码匹配记录:
on (x.ifsc = b.ifsc_code)
上述内容与
on (subquery.ifsc = bbbt.ifsc_code)
因为x
是子查询的别名,b
是bbbt
表名。
想一想
子查询只返回不等于bbbt.ifsc_code的任何值的代码
这意味着,条件subquery.ifsc=bbbt.ifsc\u code
从不匹配编辑的代码:
merge into bbbt b using (select bank,ifsc,branch,center,district,state,address,status from rtgbrn_temp) x
on (x.ifsc = b.ifsc_code)
when matched then update set rtgs_stat = 'B'
when not matched then insert (bankid,benbrn_code,brn_name,brn_addr,brn_loc,brn_stat,brn_city,coun_code,remarks,ifsc_code,rtgs_stat)
values (substr(x.ifsc,1,4), substr(x.ifsc,5), x.branch, x.address, x.district, x.state, x.center,'IN', x.bank, x.ifsc,'R');
您不需要更新部分中的where
。你没有试过吗?是的,我试过了。但这没有什么区别..检查您的数据--代码看起来正常。它正在合并,但匹配时不会更新为“B”。。不过……嘿,你说得绝对正确。真的谢谢你的启发!在删除重复项后,我将代码更改为以下内容,这样您就不会出现错误“SQL错误:ORA-30926:无法在源表中获得一组稳定的行”