2011-12-14 3 views
1

에서 null 이외의 값으로 여러 COLS를 업데이트 ISQL은 다른 테이블

server  timestamp ftpSuccRate httpSuccRate 
123.2.3.2 1:00 am  1  null 
123.2.3.2 1:00 am  null  0.5 

내가 다른 테이블의 (표 2)를 업데이트하려는 선택하는 경우 쿼리의 결과로 다음 표 (표 1) 구조를 가질 수

server  timestamp ftpSuccRate httpSuccRate 
123.2.3.2 1:00 am  1   0.5 

는 기본적으로 나는 테이블 1의 NOT NULL ftpSuccRate 값을 표 2의 ftpsuccrate을 업데이트 할 표에서 값을 사용하여 다음과 같은 구조를 가지고있다. httpSuccRate와 동일합니다. 표 betweent 기준을 가입하고 표 2는 서버이며

답변

0
UPDATE table2 

SET table2.ftpSuccRate = CASE 
           WHEN table1.ftpSuccRat IS NULL TEHN 
            table2.ftpSuccRate 
           ELSE 
             table1.ftpSuccRat 
         END. 
table2.httpSuccRate = CASE 
           WHEN table1.httpSuccRate IS NULL TEHN 
            table2.httpSuccRate 
           ELSE 
             table1.httpSuccRate 
         END 


FROM (your case select here) AS table1 
WHERE table2.server = table1.server AND table2.timestamp = table1.timestamp 
+0

기술적으로 작동하지만이 쿼리는 IP 주소/타임 스탬프 필드 간의 일대일 매핑을 가정하기 때문에 충분하지 않습니다.이 경우 잠재적으로 여러 행이 업데이트 될 수 있습니다. 포스터가 하지. – icfantv

+0

실제 그는 일치하는 부분을 업데이트하고 싶다고 말하면서 그의 유일한 일치 기준은 서버와 타임 스탬프이며 이는 그의 예에서 제공 한 것입니다. 맞습니다. 고유 한 키가 없으면 여러 행을 업데이트하지 않을 수도 있지만 주어진 정보로 작업하고 있습니다. – Maess

0

당신은 정확하게 매핑 할 수 있도록 (표 1에 FK로) 표 2에 또한 표 1에서 고유 ID 필드의 어떤 종류가 필요합니다 tiemstamp 자료. 불행하게도 IP 주소 및/또는 타임 스탬프를 사용하는 것만으로는 충분하지 않습니다. 데이터가 여러 번 일치하는 것을 방지하여 여러 업데이트가 발견되어 수행되는 것을 방지하기 위해 데이터가 "충분히 고유하지"않습니다.

타임 스탬프는 두 테이블 간의 일치를 고유하게 식별하는 좋은 방법이 아닙니다. 이것이 SQL이 우리에게 PKs와 FKs를 제공하는 이유입니다.