0

table1 と table2 の 2 つの異なるテーブルで 2 つのシリアル番号を比較する SQL ステートメント (以下を参照) を作成しています。シリアル番号が存在する場合は、table1 の別の列を「はい」で更新し、table1 のシリアル番号が table2 に存在しない場合は「いいえ」で更新します。

私の現在のSQLステートメントは完全に機能し、必要に応じて列に「はい」を入力します。私の問題は、シリアル番号が存在しないときに「いいえ」を配置する代わりに、NULL に更新されることです。日付とインストールが両方のテーブルで一致する両方のテーブルのシリアル番号のみを比較したいので、where ステートメントは重要です。すべての行を比較したくありません。ありがとう

UPDATE dbo.table1
    SET [Match] = CASE WHEN dbo.table2.[Serial Number] IS NOT NULL
    THEN 'yes' ELSE 'no' END
        FROM dbo.table1 LEFT OUTER JOIN dbo.table2
            ON dbo.table2.[Serial Number] = dbo.table1.[Serial Number]
        Where dbo.table1.[Date] = 'JAN11' AND 
              dbo.table1.[Install] = 'new' AND
              dbo.table2.[Date] = 'JAN11' AND 
              dbo.table2.[Install] = 'new'
4

1 に答える 1

2

WHERE 条件を JOIN の条件に入れます。

UPDATE dbo.table1
SET [Match] = CASE WHEN dbo.table2.[Serial Number] IS NOT NULL
THEN 'yes' ELSE 'no' END
    FROM dbo.table1 LEFT OUTER JOIN dbo.table2
        ON dbo.table2.[Serial Number] = dbo.table1.[Serial Number]
    AND dbo.table1.[Date] = 'JAN11' AND 
          dbo.table1.[Install] = 'new' AND
          dbo.table2.[Date] = 'JAN11' AND 
          dbo.table2.[Install] = 'new'

@Baz1nga:

WHERE によって行が除外されるため、値の設定は table1 に割り当てられません。

これを試して:

create table tblA
(
x int, y varchar(10)
);


create table tblB
(
x int, some_date varchar(10), serial_number int
);


insert into tblA(x,y) values(1,'www');
insert into tblB(x,some_date,serial_number) values(1,'yyy',76);

print 'First update';
update tblA
set y = case when tblB.serial_number is not null then 'Yes' else 'No' end
from tblA 
left join tblB on tblB.x = tblA.x 
where tblB.some_date = 'JAN11';

select * from tblA;

print 'Second update';
update tblA
set y = case when tblB.serial_number is not null then 'Yes' else 'No' end
from tblA 
left join tblB on tblB.x = tblA.x 
and tblB.some_date = 'JAN11';

select * from tblA;

出力:

(1 row(s) affected)

(1 row(s) affected)
First update

(0 row(s) affected)
x           y
----------- ----------
1           www

(1 row(s) affected)

Second update

(1 row(s) affected)
x           y
----------- ----------
1           No

(1 row(s) affected)
于 2012-06-21T11:20:07.583 に答える