博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
plsql 跨表 update
阅读量:5074 次
发布时间:2019-06-12

本文共 1676 字,大约阅读时间需要 5 分钟。

    接到新任务,对比两个程序、不同数据库、不同数据表、不同字段的值。

 

接到任务第一想法,如果我用一条sql搞定这个超跨区任务是不是很 NB。

很快,我就放弃了这个想法。毕竟,认清现实还是有必要的(一条sql横跨两台不同服务器,如有大神能做到,请指教 - )。

一、先用 Navicat 工具下的 - 数据传输 : 把两个不同服务器下、不同数据库下、不同表,搞到同一个库内。

 

到了同一数据库下,直面的问题就只有跨表修改这个问题了。

 

在不知道可以跨表update的前提下,想到来个中间表,把需要对比的两个字段搞到一个表中,在进行修改操作。转念想想,这么做对比后的中间表要同步到被修改表时候,还是个跨表问题。

 

二 、直接来吧 ~

 

  • 写个sql 试试 ~~ update + 两表名
UPDATE so_equipment_manage so,t_s_category T SET so.asset_name = T.NAME WHERE    so.asset_type = T.code     AND so.asset_name != T.NAME     AND so.asset_type = 'A06A01A03';

 

运行结果:

 

显然,上面这个sql 是不行的,update 后只能跟一个表名。 在逗号哪里就报错了。

 

  • 再试一次 ~ 写个子查询,把 对比表写到后面去
UPDATE so_equipment_manage AS so SET so.asset_name = (SELECT T    .NAME FROM    t_s_category AS T WHERE    so.asset_type = T.code     AND so.asset_name != T.NAME     AND so.asset_type = 'A06A01A03'     );

 

 

set 后 表别名字段不存在,删掉这个别名呢?

 

  • 再次运行 ~
UPDATE so_equipment_manage AS so SET asset_name = (SELECT T    .NAME FROM    t_s_category AS T WHERE    so.asset_type = T.code     AND so.asset_name != T.NAME     AND so.asset_type = 'A06A01A03'     );

 

 

 

此一修改,瞬间把 so_equipment_manage 表中 asset_name 字段全部改为 null 。

惊出一身冷汗,瞬间都想到了老板的咆哮和辞退信,转念一想我这是测试数据。无量那个天尊,还好我习惯性谨慎。尝试sql前先备份出来一份环境,确定sql可用才在正式环境使用。

【注:对于没有100%把握的sql,先使用测试数据库进行测试。 这个很重要!!!

并尽量缩小修改范围,我的sql中 asset_type = 'A06A01A03' 这个条件是单独加的,仅仅对这一类数据进行尝试。即使这样,错误的sql 也会使得表内所有数据被修改。】

 

  • 子查询不通,在where条件前后加上 对比表。

意不意外,成功了,哈哈哈 ~~~

 

UPDATE so_equipment_manage so SET asset_name = T.NAME FROM    t_s_category T WHERE    so.asset_type = T.code     AND so.asset_type = 'A06A01A03';

 

 

  • 最终 确定 跨表修改方式:

upadte table1 t1 set 被修改字段 = t2.提供值字段 from table2 t2 where t1.value1 = t2.value2 ;

重点:set 后 被修改字段不能用 【 别名.被改字段 】,这里的别名会被不识别而报错。

 

 

转载于:https://www.cnblogs.com/wgy1/p/10749884.html

你可能感兴趣的文章
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
redis集群如何清理前缀相同的key
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
获取元素
查看>>
proxy写监听方法,实现响应式
查看>>
第一阶段冲刺06
查看>>
十个免费的 Web 压力测试工具
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>
php变量什么情况下加大括号{}
查看>>
linux程序设计---序
查看>>
【字符串入门专题1】hdu3613 【一个悲伤的exkmp】
查看>>
C# Linq获取两个List或数组的差集交集
查看>>
HDU 4635 Strongly connected
查看>>