【问题标题】:Ignore a SELECT LIKE statement if an identical one has already been satisfied.如果已满足相同的语句,则忽略 SELECT LIKE 语句。
【发布时间】:2013-07-06 22:59:23
【问题描述】:

我有一个有 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');

Pntertek 和 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 语句。这可能使用 SQLite 吗?我该怎么做?

就 sqlite 和一般编程而言,我是一个初学者,因此我们将不胜感激。

提前致谢。

【问题讨论】:

    标签: sql sqlite duplicate-removal fuzzy-search


    【解决方案1】:

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

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

    【讨论】:

    • 我刚刚使用 excel 删除了重复的 SELECT 代码行。这只是我可以使用的标准示例,我计划了一个更严格的搜索过程,但谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多