Sql 在多个表中查找相似的名称
我有多个具有不同客户名称的表。我试图找出同一个名字在一个表中出现了多少次。这里的挑战是,可能有人输入了“约翰·史密斯”或“史密斯,约翰”的名字 每个表中有40000行和40多个不同的表。我试图在不知道姓名的情况下进行查询,但仍然返回类似姓名的结果 基本上,我需要分组类似的名称,而不使用以下语句:Sql 在多个表中查找相似的名称,sql,sql-server,tsql,sql-like,Sql,Sql Server,Tsql,Sql Like,我有多个具有不同客户名称的表。我试图找出同一个名字在一个表中出现了多少次。这里的挑战是,可能有人输入了“约翰·史密斯”或“史密斯,约翰”的名字 每个表中有40000行和40多个不同的表。我试图在不知道姓名的情况下进行查询,但仍然返回类似姓名的结果 基本上,我需要分组类似的名称,而不使用以下语句: WHERE cust_name LIKE '%john%' 当其中的数据格式可能不同时,如何使用其他表列的内容查询多个表列?如何最好地“清理”数据以删除逗号、空格等?这实际上不是数据库问题。真正的问题
WHERE cust_name LIKE '%john%'
当其中的数据格式可能不同时,如何使用其他表列的内容查询多个表列?如何最好地“清理”数据以删除逗号、空格等?这实际上不是数据库问题。真正的问题是提出一种算法,该算法将采用一个名称并将其转换为标准格式。这很难做到,而且实际上取决于源数据的外观。我会仔细查看您的源数据,并尝试找出一些要查找的模式,然后使用常规字符串操作将它们全部更改为相同的格式。您可以在SSIS中使用模糊逻辑。我已经成功地使用模糊格言来查找重复项——尽管您希望匹配的不仅仅是名称,因为许多人使用相同的名称。我用姓名、地址、电话和电子邮件进行了匹配。模糊分组允许您使用多个字段进行匹配 名称匹配可能是一项非常棘手的工作。你不仅需要担心“约翰·史密斯”对“史密斯,约翰”,还需要担心凯瑟琳对凯瑟琳对凯特对凯西对凯西。我确信有第三方数据挖掘解决方案可以解决类似的问题,尽管我无法推荐 如果您知道您的名字只有“FirstName LastName”和“LastName,FirstName”两种形式,那么您可以尝试以下方式:
SELECT
CASE
WHEN name LIKE '%,%'
THEN SUBSTRING(name, CHARINDEX(',', name) + 2, LEN(name)) + ' ' +
SUBSTRING(name, 1, CHARINDEX(',', name) - 1)
ELSE name
END AS name
字符串函数可能取决于特定的RDBMS。而且,这是相当脆弱的。它依赖于精确的格式,在列后面有一个空格,等等。如果你想要更好,你需要调整它
我还建议您在四十个表上添加一个视图作为一个UNION ALL,这样您就可以同时处理所有表。也许将某些内容硬编码到视图中,以便知道每行来自哪个表
最后,您可以考虑使用soundex,但如果您没有使用soundex的经验,那么实现它可能会很困难