Может помочь сходство Джаро-Винклера.Посмотрите на следующий пример:
SQL> with
2 table_a (fname, sname, dob, ssn) as
3 (select 'David', 'Sam' , date '1980-01-01', '123-45-6789' from dual union all
4 select 'David', 'Lieser', date '1940-10-07', '987-65-4321' from dual union all
5 select 'John' , 'Doe' , date '2001-12-31', '500-00-0000' from dual
6 ),
7 table_b (fname, sname, dob, ssn) as
8 (select 'Dave', 'Sammy' , date '1980-01-02', '223-45-6789' from dual
9 )
10 select a.fname, a.sname, a.dob, a.ssn,
11 b.fname, b.sname, b.dob, b.ssn,
12 utl_match.jaro_winkler_similarity(a.fname, b.fname) jws_fname,
13 utl_match.jaro_winkler_similarity(a.sname, b.sname) jws_sname,
14 utl_match.jaro_winkler_similarity(to_char(a.dob, 'yyyymmdd'), to_char(b.dob, 'yyyymmdd')) jws_dob,
15 utl_match.jaro_winkler_similarity(a.ssn, b.ssn) jws_ssn
16 from table_a a cross join table_b b
17 where
18 utl_match.jaro_winkler_similarity(a.fname, b.fname) >= 80
19 and utl_match.jaro_winkler_similarity(a.sname, b.sname) >= 80
20 and utl_match.jaro_winkler_similarity(to_char(a.dob, 'yyyymmdd'), to_char(b.dob, 'yyyymmdd')) >= 80
21 and utl_match.jaro_winkler_similarity(a.ssn, b.ssn) >= 80;
FNAME SNAME DOB SSN FNAM SNAME DOB SSN JWS_FNAME JWS_SNAME JWS_DOB JWS_SSN
----- ------ -------- ----------- ---- ----- -------- ----------- ---------- ---------- ---------- ----------
David Sam 01.01.80 123-45-6789 Dave Sammy 02.01.80 223-45-6789 84 90 95 93
SQL>
Я установил ограничение на 80 , но вы можете принять другое решение.Удалите предложение WHERE
(строки # 17 - 21) и проверьте возвращаемые результаты, тогда у вас будет более четкое представление о том, что происходит.