批量sql生成的技巧

工作中遇到个小问题 通过同事的帮助 解决了 所以记下来分享给可能有类似需求的同学们,问题是这样的:

表A中有两列数据没有值 导致返回的数据缺少信息 庆幸的是表B中有这两列数据 并且 AB有个字段对应 ,这种问题能想到两种方案 

1:将原查询sql 关联表B 连接上缺失的数据到结果集。

2:暂时将表B的数据提出来补到表A中。

因为是生产问题 如果选用方案一 我们必须先改代码 再组织紧急发版 这期间应用将会暂停 不能提供服务了 所以不能使用。只好选择方案二


A表中缺失的数据有100+条 我不可能手写一百多条update 再交由DBA执行 因为那样太慢了(就算有UE列模式操作的帮助 一部分数据还是要靠手动复制)而且极易出错,对于敏感的生产数据来说 不可取,再说了 要是有两万条呢  所以采用自己拼接UPDATE sql的方式来解决这个问题 拼接完毕只需要将结果集复制出来 全部粘贴给DBA就行了 很大程度避免了操作错误。下面分别从oracle 和 mysql 给出具体例子。

ORACLE:oracle中连接字符串使用 || ,MYSQL:mysql中连接使用CONCAT函数

select 'insert A  (a1,a2) values('''||b1||''','''||b2||''') where a_id='''||b_id||''';' from B where b_id in(1,2,3,4,5);
select CONCAT('update A set a1=''',b1,''', a2 = ''',b2,''' WHERE a_id = ''',b_id,''';') from B where b_id in (1,2,3,4,5);




ops1:其实字符串里 你可以写成任意类型的sql update,delete,insert都行
ops2:三个单引号有一个是负责转义的(如果b1,b2是字符串类型 生成的sql会带着单引号)
ops3:其实大致可以看出来了 这种做法就是 通过查询 将你需要的字段填充到 所要拼接的sql中 
最后输出结果 与下图类似:
 
 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值