2012-06-21 5 views
0

2 개의 다른 테이블, table1 및 table2의 2 개의 일련 번호를 비교하는 SQL 문 (아래 참조)을 작성하고 있습니다. 일련 번호가 존재하면 table1의 다른 열이 '예'로 업데이트되고 table1의 일련 번호가 table2에 존재하지 않으면 '아니오'로 업데이트하고 싶습니다.두 테이블 조인, 열 비교 및 ​​세 번째 열 업데이트

현재 SQL 문이 작동합니다 완벽하게 필요하다면 '예'로 칼럼을 채 웁니다. 내 문제는 대신 일련 번호가 존재하지 않을 때 '아니오'를 배치하는 대신 NULL로 업데이트됩니다. 두 테이블에서 날짜와 설치가 일치하는 두 테이블의 일련 번호를 비교하기를 원할뿐입니다. 나는 모든 행을 비교하고 싶지 않다. 감사합니다

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' 

답변

2

가입하기 위해 WHERE 조건을 넣어의 상태 : Baz1nga @

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' 

:

는 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; 

출력 :

내가 대답에 설명을 넣어 Baz1nga @
(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) 
+0

, 매우 업데이트 된 대답 –

+0

감사보고, 감사뿐만 아니라 설명은

이보십시오. 때로는 SQL 문을 디버깅하기가 어려워서 때로는 도움이됩니다. – kev670