Как написать запрос SQL, который ищет группу слов из другой таблицы? - PullRequest
3 голосов
/ 28 октября 2011

Я пытаюсь написать запрос для собственного стека 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 ]

2 голосов
/ 28 октября 2011

Я не знаю MS SQL, но большинство реализаций SQL имеют эквивалент 'LIKE'.Таким образом, в этом случае вы можете объединить две таблицы и использовать LIKE в условии JOIN.

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+'%'

И так далее.

0 голосов
/ 28 октября 2011
SELECT Id as PostLink
FROM Posts p
WHERE   
EXISTS 
     (
      SELECT * 
      FROM @SpellingMistakes 
      WHERE p.Body LIKE '%' + wrong + '%' 
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...