如何编写一个SQL查询来搜索另一个表中的一组单词?

时间:2011-10-28 04:36:11

标签: sql sql-server sql-server-2008 tsql

我正在尝试为Stack Exchange自己的Data Explorer编写查询。此查询将创建一个临时表,其中包含常见拼写错误的单词列表及其正确的拼写,然后搜索帖子以查找它们。

这是我到目前为止(减去评论):

DECLARE @SpellingMistakes TABLE (wrong VARCHAR(255), right VARCHAR(255))

INSERT INTO @SpellingMistakes (wrong, right)
VALUES ('ubunut', 'ubuntu')

SELECT Id as [Post Link]
FROM Posts
WHERE
    ...

这就是我被卡住的地方 - 在WHERE条款中。我需要某种方式说“如果Posts.Body包含任何@SpellingMistakes.wrong”。但是,我不知道该怎么做。

注意:数据资源管理器使用Microsoft SQL Server 2008 R2。

2 个答案:

答案 0 :(得分:2)

我不知道MS SQL,但大多数SQL实现都有一个“LIKE”等价物。因此,在这种情况下,您可以加入两个表并在JOIN条件中使用LIKE。

SELECT Id as link
FROM Posts P JOIN SpellingMistakes S
ON P.Body LIKE '%'+S.wrong+'%'

编辑:假设Posts是一个大表(并且SpellingMistakes也不是太小),这将需要大量资源。解决此问题的一种方法是将表Posts拆分为较小的子集并构造多个语句。

SELECT Id as link
FROM (SELECT * FROM Posts WHERE Id<=10000) P 
JOIN 
SpellingMistakes S
ON P.Body LIKE '%'+S.wrong+'%'

SELECT Id as link
FROM (SELECT * FROM Posts WHERE Id<=20000 and Id>10000) P 
JOIN    
SpellingMistakes S
ON P.Body LIKE '%'+S.wrong+'%'

等等。

答案 1 :(得分:0)

SELECT Id as PostLink
FROM Posts p
WHERE   
EXISTS 
     (
      SELECT * 
      FROM @SpellingMistakes 
      WHERE p.Body LIKE '%' + wrong + '%' 
      )