我有一个要求,比较一个表,并更新另一个表,如果有空记录。表LEGACY_CUST_INFO
具有正确的CUST_PRIVILEGE_NUMBER
。因此,我需要在第二个表CUST_INFO
中找出CUST_PRIVILEGE_NUMBER
中的空记录,并从第一个表LEGACY_CUST_INFO
更新CUST_PRIVILEGE_NUMBER
。除了更新CUST_PRIVILEGE_NUMBER
,我还需要用SYSDATE
更新UPDATED
列,用'ADMIN'
更新UPDATED_BY
。ROW_ID
在两个表中匹配是完全匹配。
下面是两个表结构
表1名称:LEGACY_CUST_INFO
ROW_ID CUST_PRIVILEGE_NUMBER UPDATED UPDATED_BY
1-AB 2345 16-JUN-2022 ADMIN
1-AC 3345 17-JUN-2022 ADMIN
1-AV 2335 20-JUN-2022 ADMIN
1-AN 2042 18-JUN-2022 ADMIN
1-AG 2255 01-JUN-2022 ADMIN
表2名称:CUST_INFO
ROW_ID CUST_PRIVILEGE_NUMBER UPDATED UPDATED_BY
1-AB NULL 22-JUN-2022 ADMIN
1-AC NULL 22-JUN-2022 ADMIN
1-AV 5409 22-JUN-2022 ADMIN
1-AN NULL 22-JUN-2022 ADMIN
1-AG 8848 22-JUN-2022 ADMIN
当我使用下面的更新时,它不更新任何东西。有没有办法更新空值?
merge into cust_info dst
using (
select lci.row_id, lci.cust_privilege_number
from legacy_cust_info lci
inner join cust_info ci on ci.row_id = lci.row_id
where ci.cust_privilege_number != lci.cust_privilege_number
) src
on (dst.row_id = src.row_id)
when matched then
update set dst.cust_privilege_number = src.cust_privilege_number, dst.updated= sysdate, dst.updated_by = 'ADMIN';
1条答案
按热度按时间zzlelutf1#
样本数据:
在
MERGE
的WHERE
子句中使用IS NULL
条件,因为没有任何东西“等于”NULL
,因此:WHERE d.cust_privilege_number <> s.cust_privilege_number
是不够的。结果: