我有一个场景,我需要识别重复记录的组合,并使用它们来标记和识别哪个是主要的,哪个是次要的,然后使用附加列来更新密钥。这将帮助我更新另一个具有参照完整性的子表。这是一个例子
Table Member
ID Name Birthdt MID
1 SK 09/1988 312
2 SK 09/1988 999
3 SL 06/1990 315
4 GK 08/1990 316
5 GK 08/1990 999
所以从上面的表中我识别重复的逻辑是 - 我在Name和Birthdate上做一个组,当MID是999时我认为是重复的
所以我创建了另一个临时表来捕获重复项。
Table member_dups
ID NAME BIRTHDT MID M_flg M_Key
1 SK 09/1988 P 1
2 SK 09/1988 S 1
4 GK 08/1990 P 4
5 GK 08/1990 S 4
对于我的表member_dups我能够加载重复记录并更新标志。但是,我发现很难为标记为次要的记录获得正确的M_KEY。如果我可以实现这一点,那么我可以采取该记录并相应地更新另一个表。
感谢您提供的任何帮助。
答案 0 :(得分:0)
如果我理解你的逻辑,那么MID = 999的记录就是member_dups中的次要记录。
如果是这样,您应该能够使用加入的简单更新:
update member_dups
set m_key = m.id
from member_dups md
inner join Member m on m.name = mb.name and m.birthdt = mb.birthdt
where mb.m_flg = 's' and m.mid = 999
此示例使用MSSQL语法,因此不是有效的Oracle语法,但您应该明白这一点,并希望您比我更了解Oracle。我将尝试找出正确的Oracle语法并尽快更新答案。
编辑:我认为这是有效的Oracle语法,但我无法测试它:MERGE INTO member_dups
USING
(
SELECT id,
name,
birthdt
FROM Member
where m.mid = 999
) m ON (m.name = mb.name and m.birthdt = mb.birthdt and mb.m_flg = 's')
WHEN MATCHED THEN UPDATE
SET member_dups.m_key = m.id