--创建表1
CREATE TABLE #tmp1
(
wlbh VARCHAR(30),
sl FLOAT,
sssl VARCHAR(50)
)
INSERT INTO #tmp1
( wlbh, sl, sssl )
VALUES ( 'B0027077800102',333,''
)
INSERT INTO #tmp1
( wlbh, sl, sssl )
VALUES ( 'D00012550AS01',444,''
)
INSERT INTO #tmp1
( wlbh, sl, sssl )
VALUES ( 'D00071660AS27',555,''
)
--创建表2
CREATE TABLE #tmp2
(
wlbh VARCHAR(50),
sssl FLOAT
)
INSERT INTO #tmp2
( wlbh, sssl )
VALUES ( 'D00071660AS27','222' )
--方法1更新sssl的数量,null为0
UPDATE #tmp1 SET SSSL=COALESCE(b.sssl,'',0)
FROM #tmp1 a
LEFT JOIN #tmp2 b ON b.wlbh=a.WLBH
/*结果
B0027077800102 333 0
D00012550AS01 444 0
D00071660AS27 555 222
*/
--方法2
UPDATE #tmp1 SET sssl=COALESCE(b.sssl,'',0)
FROM #tmp1 a,#tmp2 b
WHERE a.wlbh=b.wlbh
/*结果
B0027077800102 333
D00012550AS01 444
D00071660AS27 555 222
*/
SELECT *FROM #tmp1
DROP TABLE #tmp1
DROP TABLE #tmp2
1中可以将null转为0,为什么2中不可以,不是null,也不是空,是什么东西?
这两个方法有什么区别吗
------解决方案--------------------
一个左联#tmp1出全数据即使在#tmp2没有匹配数据,另一个是内联#tmp1的数据必须在#tmp2里有对应数据,不然就不更新
------解决方案--------------------
你把update 那一行换成select *
看看出来的结果 就知道了
------解决方案--------------------
方法1是left join, 方法2的写法相当于inner join.