【发布时间】:2016-06-30 14:09:31
【问题描述】:
我有这个关于 PL/SQL 的问题。 我有 2 个具有相同列的表。 一个用于当前运行,另一个用于历史记录。
每次运行时,我都需要仅使用在当前运行中找到的值来更新历史记录。
当前表
| ID |__NAME__|__SURNAME__|__CITY__|
| 10000 | ABC | CDE | IT |
| 10001 | EFG | ASD | EN |
| 10005 | | | |
历史表
| ID |__NAME__|__SURNAME__|__CITY__|
| 10000 | FFF | AAA | EN |
| 10001 | DDD | BBB | GR |
| 10005 | JKO | POI | GR |
| 10006 | DLK | MIN | IT |
如您所见,Current Table 有一条记录,其中除了 ID=10005 之外的所有值都是空的。 所以,我需要从当前表中更新历史记录(名字、姓氏、城市),其中 id 存在于当前表中,并且名字、姓氏和城市不为空。
我试过了
UPDATE HISTORY
SET (NAME, SURNAME, CITY) = (
SELECT NAME, SURNAME, CITY
FROM CURRENT temp
WHERE temp.name is not null and temp.id = history.id
)
WHERE exists (
SELECT NAME, SURNAME, CITY
FROM CURRENT temp
WHERE temp.name is not null and temp.id = history.id
);
但它不起作用。 需要强调的是,当当前表中name为null时,surname和city也为null。
【问题讨论】:
-
你使用的是 MySQL 还是 Postgres?
-
PLSQL- 我要编辑我的问题
-
你的意思是Oracle SQL吗?
标签: plsql where-clause