我想根据条件更新表格列。它应检查其他表中是否存在该值,如果存在则将使用来自其他表的值,否则将使用来自同一表的值。
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
对此有何建议?
提前致谢。
答案 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
,但为什么要将字段更新为已有的相同值?