将一个列值与另一列中包含的单词进行比较的最佳方法

时间:2013-04-19 12:44:39

标签: sql sql-server sql-server-2008 full-text-search

我的表结构如下所示。

Products { product_name, brand, model}

所有都是varchar字段(有更多字段,但它们与我的问题无关。此表中有近5000000。

现在我需要做的是,我想浏览所有产品并检查product_name是否包含任何其他产品品牌和型号(不是单词的一部分而是完整的单词,因此产品名称应该包含模型作为一个单词和品牌作为一个单词),如果存储的话,这些是相同的产品。

我已经研究了与共同相关的子查询方法的全文索引,但后来才知道CONTAINS函数不接受列名作为第二个单词,如果以某种方式实现它的速度,我也不会这样做。

对我这样做的任何建议对我都非常有帮助。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

likeexists无法实现这一点吗?

select * from Products p
where exists(select * from Products 
             where p.product_name != product_name 
             and (' ' + p.product_name + ' ' like '% ' + brand + ' % ' + model + ' %'
                or ' ' + p.product_name + ' ' like '% ' + model + ' % ' + brand + ' %'))