使用LIKE进行SQLite模糊重复搜索

时间:2013-07-08 16:56:36

标签: sql sqlite fuzzy-search sql-like

我有一个包含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的模糊复制品。我希望创建一个由模糊副本和正确拼写的名称组成的列表。但是,如果LIKE搜索没有找到模糊副本,我不希望列表包含正确拼写的名称。

以下行告诉我有多少条目符合我的模糊搜索条件:

    SELECT COUNT(name) 
    FROM tab 
    WHERE name LIKE '%ntertek' ;

    SELECT COUNT(name) 
    FROM tab 
    WHERE name LIKE '%TPay' ;

这很好,分别给出3和1。

我知道下一部分是错误的,但它表达了我想要发生的事情:

    SELECT name 
    FROM tab 
    WHERE name LIKE '%ntertek'
    GROUP BY name 
    HAVING COUNT(name) FROM tab WHERE name LIKE '%ntertek' > 1 ; 

    SELECT name 
    FROM tab 
    WHERE name LIKE '%TPay'
    GROUP BY name 
    HAVING COUNT(name) FROM tab WHERE name LIKE '%TPay' > 1 ; 

在我看来,这应该创建以下列表:Intertek,Ontertek,Entertek。

但我接近“FROM”:语法错误。

我有点像sql和编程的新手一般,所以任何帮助将不胜感激。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果您使用GROUP BY name,则每个不同的name都会有一个单独的组,然后您将无法计算相似的名称。

您应该使用子查询:

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

答案 1 :(得分:0)

我相信您正在寻找SELECT DISTINCT

SELECT DISTINCT name
FROM tab
WHERE name LIKE '%ntertek';