我正在Oracle中编写一个批处理作业,它旨在匹配重复的客户端并为它们提供相同的ID。我写了这篇文章,它似乎工作得很好。
我现在试图识别表中的记录,这些记录可能也得到了匹配。
我创建了一个临时表,提取了匹配在一起的记录:
CREATE TABLE UAT8_MultipleQSID_MatchResults_20230801 AS (
select CAST(NULL AS NUMBER) NEW_QSCLIENT_ID, cd.*
from scv_client_details cd
where cd.qsclient_id in
(select distinct cd1.qsclient_id
from scv_client_details cd1
where cd1.match_details like 'Matched with multiple QSIDs%'));
字符串
我现在想要获取的是SCV_CLIENT_DETAILS中的任何记录,其中SEX相同,DOB相同,SURNAME类似于UAT8_MultipleQSID_MatchResults_20230801中已有的记录,但该记录不在上表中。
我不知道该怎么写,有什么想法吗?
我试着写这样的东西,但它没有给我我需要的东西:
select *
from scv_client_details cd
where not exists (select *
from UAT8_MULTIPLEQSID_MATCHRESULTS_20230801 mr
where cd.sex = mr.sex
and cd.dob = mr.dob
and cd.surname like mr.surname
and cd.system_client_id <> mr.system_client_id)
order by cd.qsclient_id;
型
谢了,麦克
1条答案
按热度按时间o3imoua41#
我想性别和出生日期是没有问题的;我们不知道你的数据,所以 * 也许 * 你应该申请例如。
upper
函数到sex或trunc
到dob
。然而,姓氏是另一个故事。这几乎肯定是错误的:
字符串
因为你这样说的话,就跟你用
cd_surname = mr.surname
是一样的。有几种选择你可以尝试;以下是其中一些。示例表(我在比较同一个表中的两个姓氏;当然,你会在不同的表中比较它们)。
型
选项1:带通配符的
like
运算符:型
选项二:
soundex
功能:型
选项3:
instr
功能:型
选项4:相似性:
型
现在您已经知道两个值的相似程度,请将阈值设置为您认为合适的值,例如。90%:
型