簡體   English   中英

如何編寫一個SQL查詢來搜索另一個表中的一組單詞?

[英]How to write an SQL query that searches for a group of words from another table?

我正在嘗試為Stack Exchange自己的數據資源管理器編寫查詢。 此查詢將創建一個臨時表,其中包含常見拼寫錯誤的單詞列表及其正確的拼寫,然后搜索帖子以查找它們。

這是我到目前為止(減去評論):

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。

我不知道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+'%'

等等。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM