用于从其他表更新具有非空值的多个col的sql

时间:2011-12-14 16:05:46

标签: sql

我有以下表(table1)结构作为选择案例查询的结果

server      timestamp   ftpSuccRate httpSuccRate
123.2.3.2   1:00 am     1       null
123.2.3.2   1:00 am     null        0.5

我想用table1

中的值更新另一个具有以下结构的表(表2)
server      timestamp   ftpSuccRate httpSuccRate
123.2.3.2   1:00 am     1           0.5

基本上我想用table1的非null ftpSuccRate值更新table2的ftpsuccrate。对于httpSuccRate也是如此。 table1和table2之间的连接标准是server和tiemstamp

2 个答案:

答案 0 :(得分:0)

UPDATE table2

SET table2.ftpSuccRate = CASE
                              WHEN table1.ftpSuccRat IS NULL TEHN
                                     table2.ftpSuccRate
                              ELSE
                                      table1.ftpSuccRat 
                         END.
table2.httpSuccRate = CASE
                              WHEN table1.httpSuccRate IS NULL TEHN
                                     table2.httpSuccRate 
                              ELSE
                                      table1.httpSuccRate 
                         END


FROM (your case select here) AS table1
WHERE table2.server = table1.server AND table2.timestamp = table1.timestamp 

答案 1 :(得分:0)

您将需要表1中的某种唯一ID字段,该字段也在表2中(作为表1的FK),以确保您可以准确地映射数据。不幸的是,仅仅使用IP地址和/或时间戳是不够的,因为数据不够“足够独特”以防止发现和执行多个匹配(因此,多个更新)。

时间戳不是唯一标识两个表之间匹配的好方法 - 这就是SQL为我们提供PK和FK的原因,所以我们可以。