Oracle:根据条件进行更新

时间:2014-06-24 16:24:05

标签: sql oracle sql-update

我想根据条件更新表格列。它应检查其他表中是否存在该值,如果存在则将使用来自其他表的值,否则将使用来自同一表的值。

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 个答案:

答案 0 :(得分: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甚至不会过滤任何结果。

答案 1 :(得分: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;

查询将仅返回table2中与table1不同的那些现有值。要使它完全符合您的要求(如果表2中存在任何值,则更新table1)然后删除行AND t1.Alias <> t2.Alias,但为什么要将字段更新为已有的相同值?