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