mysql - 使用 Inner Join 删除互惠/相似记录

我有一个带有名称的 table ,其中一些是其他名称的简写,有些是相似但不是的。例如 MichaelMike 是互惠的,但 Uncle Michael 不是。我运行了一个脚本来获得单向或双向匹配,例如

Michael | Mike
Mike | Michael

然而只有

Michael | Uncle Michael

这表明它们不是匹配对。

我正在尝试使用它来删除较短的匹配项(例如 Mike)。

我有一个 http://sqlfiddle.com/#!9/0ee637/1,我只能找到匹配对,但我不确定现在如何执行 Delete t1 以从所有匹配项中删除找到的记录中较短的记录对。

回答1

从数据库服务器的角度来看,这可能会给您一些见解。我们可以使用 group by 子句对名称对中定义的名称进行分组。例如“迈克”和“迈克尔”。然后我们计算结果集中不同名称的数量。在存在多个不同名称的情况下,我们删除较短的名称。否则不删除任何内容,因为我们可能希望保留仅存在 1 个不同的名称。

delete from Names where exists 
(
    select count(*) from 
    (select name from Names where (name='Michael' or name='Mike') group by name ) t 
    having count(*) >1
)
and name='Mike'
;

相似文章

随机推荐

最新文章