我正在尝试为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。
答案 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 + '%'
)