目的是创建公司的重复检查。并提出可疑记录以便采取进一步行动。
这是通过自联接完成的,只要有完全匹配(区分大小写),一切都很好。但是'测试'和'测试'是可疑的,应该列出。一个表示问题的小提琴:
WHERE a.name ILIKE b.name
上述代码不区分大小写。未显示测试和测试。
输出应该是(无论重复记录的数量):
1 Test 5 tesT
3 Testa 4 Testa
用5条记录修改小提琴。 http://sqlfiddle.com/#!12/2c723/1
提前感谢所有线索进行不敏感的自我加入搜索!
答案 0 :(得分:0)
我想我找到了一个基于简单连接的解决方案:
create table co (id int4, name varchar(30));
insert into co values
(1,'Test'),
(2,'test'),
(3,'Testa'),
(4,'Testa'),
(5,'testT');
SELECT min(a.id),a.name,max(b.id), b.name FROM co a
LEFT JOIN co b ON lower(a.name) = lower(b.name)
WHERE a.id<b.id
GROUP BY a.name,b.name;
输出是:
1|Test|2|test
3|Testa|4|Testa
目标是一次呈现2个重复项。合并这2并重新检查重复项。
感谢&#34; a-horse-with-name-#34;对于所有新方法。