【发布时间】:2016-10-13 11:08:56
【问题描述】:
我有一个 SQL 查询,它返回表 1 中的所有记录,其中字段中的一个完整单词与表 2 中的字段名称匹配。例如,如果我在表 2 中有一个名为“brown”的字段,则字段名称在 "the quick brown fox" 的表 1 中将在结果中返回,但不会返回 "thequickbrownfox" 的字段名称,因为它在字段名。
select distinct [SpecNumber], [SpecName], sc.[SpecCrosscheckName] from [SpecSummary] ss
INNER JOIN [SpecCrosscheck] sc
on ss.[SpecName] = sc.[SpecCrosscheckName] or
ss.[SpecName] like '% ' + sc.[SpecCrosscheckName] + ' %' or
ss.[SpecName] like '% ' + sc.[SpecCrosscheckName] or
ss.[SpecName] like sc.[SpecCrosscheckName] + ' %'
order by sc.[SpecCrosscheckName]
这会按预期返回结果,但内部连接是复杂的,因此需要 3 多分钟才能运行。有没有更有效的方法来获得相同的结果?据我所知,没有办法将 like 语句合并为一个,而且我不相信这会提高性能。
我已经研究过使用CONTAINS,但我不相信字段名称可以用作此函数中的搜索条件?
额外信息: SpecCrosscheck 只包含一个字段,一个单词名称列表(“James”、“Boris”等)。 SpecSummary 中的“SpecName”字段包含全名(例如“David James”、“Joe Bloggs”)。我想返回 SpecSummary 中的所有结果,其中全名中的一个单词与 SpecCrosscheckName 中的任何记录相同(因此对于上面的示例,将返回“David James”,但不会返回“Joe Bloggs”)。
【问题讨论】:
-
我认为这里非常需要样本数据及其对预期结果的解释。如果可以的话,请提供一些
-
@Suraz 进行了编辑 - 希望可以澄清事情。
标签: sql sql-server