如果已经满足相同的语句,则忽略SELECT LIKE语句。

时间:2013-07-09 10:58:50

标签: sql sqlite duplicate-removal fuzzy-search

我有一个包含4个条目的表。

    CREATE TABLE tab( 
    name Text 
                    ); 

    INSERT INTO "tab" VALUES('Intertek');
    INSERT INTO "tab" VALUES('Pntertek');
    INSERT INTO "tab" VALUES('Ontertek');
    INSERT INTO "tab" VALUES('ZTPay');
Pntrtek& Ontertek是正确拼写的Intertek的模糊复制品。我希望创建一个由模糊重复和正确拼写的名称组成的列表。

由于我有4个名字,我有4个搜索条件:

    SELECT name FROM tab WHERE name LIKE '%ntertek' 
    AND (SELECT COUNT(*) FROM tab WHERE name LIKE '%ntertek') >1;
    SELECT name FROM tab WHERE name LIKE '%ntertek' 
    AND (SELECT COUNT(*) FROM tab WHERE name LIKE '%ntertek') >1;
    SELECT name FROM tab WHERE name LIKE '%ntertek' 
    AND (SELECT COUNT(*) FROM tab WHERE name LIKE '%ntertek') >1;
    SELECT name FROM tab WHERE name LIKE '%TPay' 
    AND (SELECT COUNT(*) FROM tab WHERE name LIKE '%TPay') >1;

这会产生3个包含相同信息的列表。如果第一个SELECT语句返回结果,我想忽略第二个和第三个相同的SELECT语句。这可能是使用SQLite,我该怎么做?

对于sqlite和一般的编程,我是一个初学者,所以任何帮助都将非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您希望查询返回什么内容?只是潜在的重复?如果是这样,您可以通过包含having语句来执行上述一个查询。但是,您目前使用的方法仅允许名称开头的差异。我建议查看类似编辑距离算法(有时称为Levenshtein距离)的内容,以确定在一个字段上需要更改的字符数,以使其与另一个字段相同。

以下链接中有可能的SQLite实现的详细信息:http://www.sqlite.org/spellfix1.html