检查sql表中的另一个表中的值

时间:2015-04-29 17:54:45

标签: sql-server tsql join

如果我有以下数据:

结果表

.[Required]
I want one grape
I want one orange
I want one apple
I want one carrot
I want one watermelon

水果表

.[Name]
grape
orange
apple

我想要做的就是告诉我用户正在寻找水果的所有结果。这只是一个例子,我正在查看一个包含大约100万条记录和4000多个字符的字符串字段的表。我期待一个有点慢的结果,我知道表格可以确定结构更好,但我无法控制。这是我本来会有的查询,但它似乎没有做我想要的。它给出了每一条记录。是的,[#Fruit]是临时表。

SELECT * FROM  [Results]
JOIN [#Fruit] ON
'%'+[Results].[Required]+'%' LIKE [#Fruit].[Name]

理想情况下,我的输出应该是以下3行:

I want one grape
I want one orange
I want one apple

2 个答案:

答案 0 :(得分:1)

这个主题让我感兴趣,所以我做了一些搜索。

建议1:全文搜索

我认为你要做的是Full Text Search

如果表格中尚未创建全文索引,则需要创建全文索引。 (Create FULLTEXT Index)。

这应该比执行"喜欢"。

更快

建议2:元数据搜索

我采取的另一种方法是创建元数据表,并在更新(或创建)[Result] .Required值时自行维护信息。

答案 1 :(得分:0)

这看起来或多或少可行,但我从Fruit表开始只是为了概念清晰。

以下是我将如何构建这一点,忽略所有性能/速度/规范化问题(另请注意我在LIKE比较中切换了变量):

SELECT f.name, r.required
FROM fruits f
JOIN results r ON r.required LIKE CONCAT('%', f.name, '%')

...并且可能添加LIMIT 10以防止查询在您测试时浪费时间。

这个结构将:

  • 为每个“匹配”(每个与水果匹配的结果行​​)提供一条记录
  • 排除没有水果的结果行
  • 可能是不合时宜的。
祝你好运!