假设我有两个表:
表1:
SELECT * FROM ORIGINAL_DEALER;
ID ENAME
----- --------------------------
1 JOHN
2 00000JOHN
3 JACK
4 00000JACK
5 MARIA
6 00000MARIA
表2:
SELECT * FROM NAMES;
ID_NUM
------
1
2
3
4
5
6
NAMES
。ORIGINAL_DEALER
具有重复/无效的名称,例如
00000JOHN
无效名称在有效名称前面有五个零前缀。即有效名称:JOHN
名称无效:00000JOHN
ORIGINAL_DEALER
表并更新ID_NUM
表中的NAMES
WITH VALID ID。即当无效ename= '00000JOHN'
的{{1}}也无效时。但是original_dealer是父表,我必须用有效的NAMES表替换所有无效的id
的。,更新NAMES后的输出应为:
ID
= 2
如果没有手动设置它,我怎么能这样做,因为会有大量数据? 我正在使用Oracle DB
答案 0 :(得分:1)
通过使用内部查找子查询,您可以使用带有如下所示的查找的更新语句,而内部查找子查询又使用TRIM函数在匹配期间去除前导零。我们还将更新限制为仅与Names
以OriginalDealer
开头的00000
记录UPDATE Names SET ID_NUM =
(SELECT od1.ID
FROM OriginalDealer od1
INNER JOIN OriginalDealer od2
ON od1.EName = TRIM(LEADING '0' FROM od2.EName)
WHERE od2.ID = Names.ID_NUM)
WHERE EXISTS
(
SELECT 1
FROM OriginalDealer od
WHERE od.ENAME LIKE '00000%'
AND Names.ID_NUM = od.ID
);
,以最大限度地降低不必要更新的风险。
00000NAME
请注意,标记重复的模型带有前缀如' 00000'相当脆弱:
NAME
ORIGINAL_DEALER
和Names.ID_NUM
行之间只有一个匹配项