匹配列 - 在查询中

时间:2015-06-25 23:30:38

标签: sql sql-server tsql

试着看看我是否可以围绕匹配这些列构建一些逻辑。 我有2张桌子

        Table A
    Make             Model
    BMW              2 Series
    BMW              3 Series
    BMW              3 Series GT
    BMW              5 Series
    BMW              5 Series GT
    BMW              7 Series
    Rolls-Royce      Other
    Mini             Cooper
    Mini             Coupe 


        Table B
    Make           Series
    BMW            2 Series
    BMW            3 Series
    BMW            5 Series
    Bavarian Motor 7 Series
    Rolls-Royce    42000 GT
    Mini           Cooper

我需要提取下面的输出并存储在表格中

    Output
    Make              Model_A        Model_B
    BMW              2 Series        2 Series
    BMW              3 Series        3 Series
    BMW              3 Series GT     3 Series
    BMW              5 Series        5 Series
    BMW              5 Series GT     5 Series
    BMW              7 Series        7 Series
    Rolls-Royce      Other           42000 GT  
    Mini             Cooper          Cooper
    Mini             Coupe           Cooper

在大多数情况下,我可以使用以下查询匹配列:

        ( A.SERIES like '%' + B.model + '%'
         OR B.model like '%' + A.series + '%' )

但这并没有处理" Coupe" vs" Cooper",劳斯莱斯和"宝马" vs"巴伐利亚汽车"例。

知道如何在T-sql或查询中处理所有这些内容吗? Soundex或任何距离算法都适用于这种情况 - 尝试过两者。

我知道我可以使用" union all"来处理所有情况。在单个查询中运行,但关键是处理上述边缘情况。

提前感谢您的帮助。 〜蜂

2 个答案:

答案 0 :(得分:0)

为什么不在下面的两个表上执行JOIN以获得匹配的模型和系列

select t1.Make,t1.Model as Model_A,
t2.Series as Model_B
from tableA t1 join tableB t2 
on t1.Make = t2.Make;

答案 1 :(得分:0)

我更愿意建议这一点,但它可能适用于您的情况:

    ( A.SERIES like '%' + B.model + '%'
     OR B.model like '%' + A.series + '%' ) or
     SOUNDEX(A.series) = SOUNDEX(b.model)

SOUNDEX()有很多问题,根本没有理由使用它 - 除非你为人口普查局工作,并希望根据拼写变化对姓氏进行分类以备将来参考。但是,您可能会发现它对这个特定问题很有用。