Oracle sql使用Soundex查找类似的字符串

Kam*_*dov -2 sql oracle

我有表HumanNames

输入是

|HumanName      |
|-------------  |
|Kamil          |
|Azer           |
|John           |
|Elmir          |
|Kamal          |
|Elmar          |
|Orxan          |
|Elnar          |
Run Code Online (Sandbox Code Playgroud)

我需要写查询,它会给出与其他名称相同的结果名称.期望的输出是

|NamesWhichLikes  |
|-------------    |
|Kamil,Kamal      |
|Elmir,Elmar,Elnar|
|                 |
Run Code Online (Sandbox Code Playgroud)

Gur*_*ngh 9

试试这个使用listagggroup bysoundex命名的:

with your_table (HumanName) as (
select 'Kamil' from dual union all 
select 'Azer'  from dual union all 
select 'John'  from dual union all 
select 'Elmir' from dual union all 
select 'Kamal' from dual union all 
select 'Elmar' from dual union all 
select 'Orxan' from dual union all 
select 'Elnar' from dual
)
------ Test data setup ends here ------


select
    listagg(humanname,',') within group (order by humanname) nameswhichlikes
from your_table
group by soundex(humanname)
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

生产:

+---------------------------+
| NAMESWHICHLIKES           |
+---------------------------+
| Elmar,Elmir,Elnar         |
+---------------------------+
| Kamal,Kamil               |
+---------------------------+
Run Code Online (Sandbox Code Playgroud)

如果名称重复:

select
    listagg(humanname,',') within group (order by humanname) nameswhichlikes
from (select distinct humanname from your_table)
group by soundex(humanname)
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)