两表关联进行更新--满足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)

原创粉丝点击