两表关联进行更新--满足A条件一种更新,不满足A条件是另外一种更新
来源:互联网 发布:java 500错误原因 编辑:程序博客网 时间:2024/06/06 00:23
测试数据与结果:
请参照相册《满足A条件一种更新,不满足A条件是另外一种更新》
说明:
需求:
表A
表B
注意:表B只有一条数据
当表A.a3 = 表B.b1的场合,
第一步:表A.a5 = 表A.a5 + 表B.b2
第二步:表A.a6 = 表A.a4 + 表A.a5
当表A.a3 <> 表B.b1的场合,
第一步:表A.a5 不更新
第二步:表A.a6 = 表A.a4 + 表A.a5
以前比较简单的做法:是分两个sql写,一个处理相等的场合,另一个处理不相等的场合。
现在的做法:把两种情况写在一个sql中,一次处理,通过left join,如果匹配上了,就把表B.b2字段取到,直接参与计算,取不到就返回null,计算的时候使用isnull函数判断。
使用sqlserver的写法:
UPDATE 表A
SET
a5 = CASE WHEN a5 IS NOT NULL OR B.b2 IS NOT NULL THEN
CAST(ISNULL(a5,0) AS NUMERIC)+
CAST(ISNULL(B.b2,0) AS NUMERIC)
ELSE a5
END,
a6 = CASE WHEN B.b2 IS NOT NULL OR a4 IS NOT NULL OR a5 IS NOT NULL THEN
CAST(ISNULL(B.b2,0) AS NUMERIC)+
CAST(ISNULL(a4,0) AS NUMERIC)+
CAST(ISNULL(a5,0) AS NUMERIC)
ELSE a6
END
FROM 表A A
LEFT JOIN (SELECT TOP(1) b1, b2 FROM 表B) B
ON A.a3=B.b1 OR (A.a3 IS NULL AND B.b1 IS NULL)
- 两表关联进行更新--满足A条件一种更新,不满足A条件是另外一种更新
- 存储过程,更新满足条件的数据
- 两表关联条件,更新其中一表方法 You can't specify target table
- 两表关联更新
- 一种高效率的update多表关联更新测试
- 逐行更新数据,满足条件后终止 --【叶子】
- 可更新结果集的使用需满足的条件
- insert into 实现插入 或者满足条件更新实例
- ARP缓存表更新条件
- 两表关联进行更新,使用T2的数据更新T1(等值更新)
- 更新 将B表的数据更新到A表中的某个字段的sql(根据条件)
- Oracle两表关联更新
- oracle两表关联更新
- Oracle 两表关联更新
- oracle两表关联更新
- SQL 根据条件更新
- 根据条件更新序列号
- 根据条件更新字段
- MouseLeftButtonDown 事件不触发
- OSR文档:NT中的异步过程调用(APC)
- 又一期CMS系统技能考试
- IFormatter 提供将序列化对象格式化的功能。
- PPT演讲者视图
- 两表关联进行更新--满足A条件一种更新,不满足A条件是另外一种更新
- OpenCV程式設計介紹(2)
- 修改文件权限命令chmod的用法
- DirectX 3D 基本框架(五)
- js 取控件坐标
- 几种js实现的动态多文件上传
- Strcpy和Strncpy的区别-
- html:text
- java 文件操作