试图匹配来自2个不同表的记录

时间:2018-07-30 10:06:05

标签: sql-server

我有2个表(2008 mssql数据库),可以说x.dboy.dbo

x.dbo的字段名称为"customer name",而y.dbo的字段名称为"customers"。一个表的数据由customers输入,另一个表的数据由shipping company输入,而我几个月来一直试图完成的工作是过滤所有匹配且部分匹配的customers ..(两个条件合在一起)

这是我的查询:

SELECT * FROM X JOIN Y ON 
UPPER(X.CustomerName) LIKE '%' + UPPER(Y.Customers)    + '%' 
OR    UPPER(Y.Customers)    LIKE '%' + UPPER(X.CustomerName) + '%';`

上面的查询提供了大多数匹配的记录,但不是全部。

我不知道上面的代码为什么与下面的这两个名称不匹配:

 İBRAHİM HAKKI KAZANCI <--> İBRAHIM HAKKI KAZANCI

这两个名称之间唯一的区别是一个写为"İBRAHİM",另一个写为"İBRAHIM"(带有大写字母I),我需要将它们匹配,因为它们是相同的(而运输公司输入数据(基于我们的发票),有时他们会犯这样的小错误。)

注意:我的数据库的归类为Turkish_CI_AS

如果您能修复我的sql语句,使这两个名称也匹配,我会很高兴。

1 个答案:

答案 0 :(得分:0)

这可能不是一个准确的解决方案,但可以为您服务。使用Soundex函数进行比较。

您需要的Soundex功能

select SOUNDEX('İBRAHİM HAKKI KAZANCI') , SOUNDEX('İBRAHIM HAKKI KAZANCI')

这将产生

(No column name)    (No column name)
I165                I165

所以您可以使用类似的东西

SELECT * FROM X JOIN Y ON 
SOUNDEX(X.CustomerName) = SOUNDEX(Y.Customers) 
OR    SOUNDEX(Y.Customers)=SOUNDEX(X.CustomerName)