2017-07-14 4 views
1

私はちょうどまだ正しい結果(0行が影響を受けていない)を取得しているのだろうかと思っています 私の更新SQLと。テーブルBのデータからテーブルAを価格とサイズで更新するだけでいいですか?更新スクリプトを実行すると、影響を受ける行が0になります。どうして?T-SQLを使用して2つのテーブルを更新するには?

表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行(複数可)の影響を受ける)

+1

あなた 'Class'の欄には、[ANSI_NULLS](https://docs.microsoft.com/en-us/sql/t-sql/statements/set-ansiない限り、すべての行に対してNULLであるため、 -nulls-transact-sql)がOFF(通常はこれをお勧めしません)の場合、テーブルに参加することはできません。 NULLはANSI_NULLS ONを持つものと等しくなく、未知でNULLはNULLと等しくありません。 – ZLK

答えて

1

これを試してください:あなたは、null値を比較する必要が別途

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 
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,'') 
で起こっていると考えています
0

追加する必要がありますISNULL(,)列がNULL可能な場合

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) 
関連する問題