2014-06-24 6 views
0

조건에 따라 표의 열을 업데이트하고 싶습니다. 그것은 값이 다른 테이블에 있는지 확인해야합니다. 존재하면 다른 테이블의 값이 사용됩니다. 동일한 테이블의 다른 값이 사용됩니다.오라클 : 조건에 따라 업데이트

Update table1 
Set column1=(select t2.alias||’@email.com’ as new_name 
From table2 t2, table1 t1, table3 t3 
Where t1.id=t2.id 
And t1.id=t3.id 

Else if 
Select t2.alias is null or t2.id is null 
then column1= select t1.id||’@email.com’ as new_name 

미리 감사드립니다.

답변

2

원하는대로 할 수 있습니까?

Update table1 
Set column1 = (select (case when t2.alias is not null and t2.id is not null then t2.alias 
          else t1.id 
         end) ||'@email.com' as new_name 
       From table1 t1 left outer join 
        table2 t2 
        on t1.id=t2.id 
      ); 

사용하지 않는 것 같아서 table3을 삭제했습니다. left join은 어떤 결과도 필터링하지 않습니다.

+0

예상대로 작동합니다. 고맙습니다. – user2974732

0

merge 문의 "삽입"절반을두면, 당신은 엄격하게 update 문으로 그것을 만들 수 있습니다 :

MERGE INTO table1 t 
USING(
    SELECT t2.id, t2.Alias 
    FROM table2 t2 
    JOIN table1 t1 
    ON t1.id = t2.id 
    AND t1.Alias <> t2.Alias 
) tu 
on(tu.id = t.id) 
WHEN MATCHED THEN 
    update set t.Alias = tu.Alias; 

쿼리는 표 1과 다를 표 2에서 만 기존 값을 반환합니다. 귀하의 요구 사항을 정확히 일치하게하려면 값이 table2에있는 경우 table1을 업데이트하십시오. 그런 다음 AND t1.Alias <> t2.Alias 라인을 제거하십시오. 그러나 필드에 이미있는 값을 업데이트해야하는 이유는 무엇입니까?