受累给看看这个sql,更新A表时需要,从其它2个表里查询数据,比较复杂
时间:2011-10-28
来源:互联网
作者: charlesxu 发布时间: 2011-10-28
作者: charlesxu 发布时间: 2011-10-28
作者: tx2730 发布时间: 2011-10-28
作者: opps_zhou 发布时间: 2011-10-28
因为t4的resperson是英文名,t6里的name是中文名。所以要用t6里的name和t5里的user_name对应,找到t5里的account(英文名)。然后再和t4的resperson对照更新
update cp_kpi_info_fy t4 set t4.resperson = (select t5.account from security_ultra_user t5, tb_tmp_wei t6 where t6.name = t5.user_name and t4.capescode = t6.code)
这样写对吗?
作者: charlesxu 发布时间: 2011-10-28
t4是指标和对应负责人的表,t5是英文名和中文名的对应表,t6也是指标和对应负责人的表(从excel里导入的)
需要写个sql自动检查t6里的指标和对应负责人是否和t4中的一致。
因为t4的数值较老,可能不对
作者: charlesxu 发布时间: 2011-10-28
SQL code
UPDATE cp_kpi_info_fy t4 SET t4.resperson = (SELECT t5.ACCOUNT FROM security_ultra_user t5, tb_tmp_wei t6 WHERE t6.NAME = t5.user_name AND t4.capescode = t6.code and rownum<=1) WHERE t4.capescode IN (SELECT t6.code FROM security_ultra_user t5, tb_tmp_wei t6 WHERE t6.NAME = t5.user_name)
作者: tx2730 发布时间: 2011-10-28
rownum<1 这句有什么用呢?按理说t4和t6没有重复指标,不应该返回很多行相同的吧?
作者: charlesxu 发布时间: 2011-10-28
作者: zxf261 发布时间: 2011-10-28
(select t5.account from security_ultra_user t5, tb_tmp_wei t6 where t6.name = t5.account and t4.capescode = t6.code)
例如t4.capescode=1
那么t6.code=1的情况下,t6.name有多个,导致返回了多个account。
作者: zxf261 发布时间: 2011-10-28
这两个where的用处不同,第一个用于select,是要找出对应的ACCOUNT.第二个用于update,说明只有这些数据要更新,如果不加后面这个where,就会把所有数据都更新一次,在select中没有找到值的就会被更新为null
rownum<1 这句有什么用呢?按理说t4和t6没有重复指标,不应该返回很多行相同的吧?
rownum<1是让Oracle不报"single-row subquery returns more than one row",因为Oracle怀疑这句select会找出多行,仅仅是怀疑而已.用rownum<=1就是告诉Oracle,这里只有一条记录.
作者: tx2730 发布时间: 2011-10-28
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28