【发布时间】:2014-08-08 14:41:43
【问题描述】:
我有一个 SQL 问题,我对 SQL 比较陌生,所以请不要介意这是否过于幼稚。我正在 ORACLE 中将值从一个表更新到另一个表。
表Person
PersonID BirthPlace
---------------------------
1 Madison,WI,USA
2 Chicago,IL
3 Houston,TX,USA
4 Madison,WI,USA
5 Madison,WI,USA
6 Houston,TX,USA
7 NULL
表PersonProfile
PersonID CITY STATE COUNTRY
-------------------------------------------------
1 Madison WI USA
2 Chicago IL NULL
3 NULL NULL NULL
4 NULL WI NULL
5 NULL NULL USA
6 HOUSTON NULL NULL
7 NULL NULL NULL
我需要使用来自 Table Person 的值更新 Table Person Profile,并且只需要在 Table Person Profile 中的列具有空值时更新它们,如果两个表都具有空值,那么我需要输入“未知”。
我可以编写单独的更新语句来更新每列中的值,例如更新城市:
Update PersonProfile PF
SET PF.CITY= (SELECT
CASE
WHEN PP.CITY LIKE '%MADISON%'
THEN 'MADISON'
WHEN PP.CITY LIKE '% Houston%'
THEN 'HOUSTON'
WHEN PP.CITY LIKE '% CHICAGO%'
THEN 'CHICAGO'
ELSE
'UNKNOWN'
END AS CITY
FROM PERSON PP
WHERE PF.PERSONID=PP.PERSON.ID
AND PF.CITY IS NULL)
以及用于更新州和国家/地区的类似查询。
我的问题是,有什么方法可以编写一条更新语句来更新所有三列而不是一一更新?如果我可以在解码函数中使用 like 运算符,而不是使用 CASE 语句?
【问题讨论】:
-
如果
Person和PersonProfile共享相同的唯一键,为什么它们在不同的表中? -
它们在两个独立的数据库中,所以我需要从一个数据库转换到另一个数据库并关闭旧数据库