2016-12-27 126 views
0

我想根据表2和表3更新表1.现在我正在两个单独的语句中更新它。MS Sql - 基于表2和表3更新表1

是否可以首先根据表2更新表1,然后是否使用连接更新表3中的NULLS。

我试图建立一个查询,但其中包括

tbl1.col1 = tbl3.col1

update tbl1 
set tbl1.col1= tbl2.col1 
from table1 tbl1 
    left JOIN table2 tbl2 
    ON tbl1.col = tbl2.col 
    left JOIN table3 tbl3 
    on tbl1.col=tbl3.col and tbl2.col<>tbl3.col 

回答

1

我觉得你只是想coalesce()

update tbl1 
    set col1 = coalesce(tbl2.col1, tbl3.col1) 
    from table1 tbl1 left join 
     table2 tbl2 
     on tbl1.col = tbl2.col left join 
     table3 tbl3 
     on tbl1.col = tbl3.col and tbl2.col <> tbl3.col; 
+0

谢谢,查询将实现所要查找的内容,对此我有点困惑 –

+0

你对什么感到困惑?这些都是有效的查询。 –

+0

@BartoszSiemasz - 花时间了解我可以点击那个灰色刻度标记 –

0

使用COALESCEISNULL都返回第一个NOT NULL

试试这个

UPDATE tbl1 
SET tbl1.col1 = COALESCE(tbl2.col1, tbl3.col1) -- ISNULL(tbl2.col1, tbl3.col1) 
FROM table1 tbl1 
     LEFT JOIN table2 tbl2 
       ON tbl1.col = tbl2.col 
     LEFT JOIN table3 tbl3 
       ON tbl1.col = tbl3.col 
       AND tbl2.col <> tbl3.col 
+0

谢谢你,会查询达到什么找的,我对此有点困惑。 –