如何在数据库中找到相同或相似名称的重复公司的数量

ozxc1zmp  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(301)

到目前为止,我在做:

SELECT c.name, COUNT(*)
FROM companies c
group by c.name
HAVING COUNT(*) >1;

但很明显,这不允许我找到类似但不完全相同名称的公司。我怎么找到这个?
例如,相同的名称是:

Walmart Inc.

Walmart Inc.

不同的名称是:

Walmart Inc.

Walmart, Inc

Walmart

Walmart Incorporated etc.

尽管名称不同,但这些公司应被认定为相同的公司。

du7egjpx

du7egjpx1#

这通常称为模糊搜索,是一个与全文搜索相关的概念。你的问题是你把分组添加到了问题中。
所以对于您的特定示例,您需要创建一个包含所有形式的文本的中间表,以便Map回单个可分组实体(外键)。
如果你只是想搜索所有形式的沃尔玛,你可以使用 like '%Walmart%' 或者 where contains(name, "Walmart") 等等,这取决于你的sql风格。但这些都是简单的搜索where子句。您试图按所有已知的变体进行分组,这意味着您必须首先标识表中的所有已知变体,然后Map到单个确定性Map键或值。
做一个快速的google搜索可以给出这个演练的一个例子。
如果你只关心沃尔玛,你可能会逃脱一个复杂的cte,把所有形式的沃尔玛成一个单一的关键飞行。。。但我猜你桌上的东西要比那些有各种形式的东西多得多。
故事的寓意。。。这是由于前期的数据质量/数据管理较差导致的结果,而这类工作最终会导致您不得不支付后期的费用。

相关问题