如何使用T-SQL更新2个表?

时间:2017-07-14 03:32:00

标签: sql-server tsql

我只是想知道为什么仍然得不到正确的结果(0行受影响) 用我的更新SQL。请帮助我只需要使用Price和Size更新表B数据中的表A.执行更新脚本后,我得到0行受影响。为什么呢?

表A

TableAId    CountNo     Class       RoomNo      Section     Price       Sale    Size
4           1           NULL        9           B           24347000    NULL    NULL
5           1           NULL        9           C           26881000    NULL    NULL
12          1           NULL        8           B           24245000    NULL    NULL
16          1           NULL        8           A           39038000    NULL    NULL
3           1           NULL        8           C           26495370    NULL    NULL
21          1           NULL        6           D           36423000    NULL    NULL
14          1           NULL        6           C           27200000    NULL    NULL
1           1           NULL        5           C           30483000    NULL    NULL
2           1           NULL        5           D           41052330    NULL    NULL

表B

TableBId    CountNo     Class       RoomNo      Section     Transaction     Sale        Size
12          1           NULL        9           B           NULL            24347000    23800
20          1           NULL        9           C           NULL            26881000    22800
44          1           NULL        9           NULL        NULL            40079000    23100
69          1           NULL        9           D           NULL            37614000    22100
21          1           NULL        8           C           NULL            26763000    22700
28          1           NULL        8           D           NULL            37444000    22000
13          1           NULL        8           B           NULL            24245000    23700
5           1           NULL        8           A           NULL            39038000    22500
6           1           NULL        7           A           NULL            39558000    22800

更新的表格:

TableAId    CountNo     Class       RoomNo      Section     Price       Sale        Size
4           1           NULL        9           B           24347000    24347000    23800
5           1           NULL        9           C           26881000    26881000    22800
12          1           NULL        8           B           24245000    24245000    23700
16          1           NULL        8           A           39038000    39038000    22500
3           1           NULL        8           C           26495370    26763000    22700
21          1           NULL        6           D           NULL        NULL        NULL
14          1           NULL        6           C           NULL        NULL        NULL
1           1           NULL        5           C           NULL        NULL        NULL
2           1           NULL        5           D           NULL        NULL        NULL

SQL语句:

UPDATE x
SET x.Sale = y.Sale,
    x.Size = y.Size
FROM TableA x
JOIN TableB y ON x.CountNo = y.CountNo 
              AND x.Class = y.Class 
              AND x.RoomNo = y.RoomNo 
              AND x.Section = y.Section
  

(0行(s)受影响)

3 个答案:

答案 0 :(得分:1)

试试这个:你需要单独比较空值

UPDATE x
SET 
    x.Sale = y.Sale,
    x.Size = y.Size
FROM TableA x
    JOIN TableB y 
        ON 
        x.CountNo = y.CountNo AND
        (x.Class = y.Class OR (x.Class IS NULL and y.Class IS NULL)) AND
        x.RoomNo = y.RoomNo AND
        x.Section = y.Section

答案 1 :(得分:0)

我认为这是因为NULL

而发生的
UPDATE x
SET 
    x.Sale = y.Sale,
    x.Size = y.Size
FROM 
    TableA x
    JOIN TableB y ON x.CountNo = y.CountNo 
                AND ISNULL(x.Class,'') = ISNULL(y.Class,'') 
                AND x.RoomNo = y.RoomNo 
                AND ISNULL(x.Section,'') = ISNULL(y.Section,'')

答案 2 :(得分:0)

如果列可以为空,则需要添加ISNULL(, )

UPDATE x
SET 
    x.Sale = y.Sale,
    x.Size = y.Size
FROM TableA x
    JOIN TableB y 
        ON 
        ISNULL(x.CountNo, 0) = ISNULL(y.CountNo, 0) AND 
        ISNULL(x.Class, '') = ISNULL(y.Class, '') AND
        ISNULL(x.RoomNo, 0) = ISNULL(y.RoomNo, 0) AND
        ISNULL(x.Section, '') = ISNULL(y.Section, 0)