工作中遇到个小问题 通过同事的帮助 解决了 所以记下来分享给可能有类似需求的同学们,问题是这样的:
表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中
最后输出结果 与下图类似: