SQL Server: как сравнить две таблицы - PullRequest
2 голосов
/ 10 августа 2010

У меня проблема со сравнением двух таблиц в SQL Server.

У меня есть первая таблица [Table1] с текстовым столбцом, где я храню свое содержание, и вторая таблица [table2] с столбцом моих ключевых слов.

И теперь я хочу сравнить все мои ключевые слова с моим контентом и получить список ключевых слов с количеством вхождений в контенте. (достаточно ясно?)

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Какая версия SQL Server? Если SQL2008 вы можете сделать (вероятно, после преобразования из текста в nvarchar(max))

WITH Table1 AS
(
SELECT 1 AS Id, N'how now brown cow' AS txt UNION ALL
SELECT 2, N'she sells sea shells upon the sea shore' UNION ALL
SELECT 3, N'red lorry yellow lorry' UNION ALL
SELECT 4, N'the quick brown fox jumped over the lazy dog'
),
Table2 AS
(
SELECT 'lorry' as keyword UNION ALL
SELECT 'yellow' as keyword UNION ALL
SELECT 'brown' as keyword
)

SELECT Table1.id,display_term, COUNT(*) As Cnt
FROM Table1
CROSS APPLY sys.dm_fts_parser('"' + REPLACE(txt,'"','""') + '"', 1033, 0,0)
JOIN Table2 t2 ON t2.keyword=display_term
WHERE TXT IS NOT NULL
GROUP BY Table1.id,display_term
ORDER BY Cnt DESC

Возвращает

id          display_term                   Cnt
----------- ------------------------------ -----------
3           lorry                          2
3           yellow                         1
4           brown                          1
1           brown                          1
0 голосов
/ 10 августа 2010

Это вернет вам список идентификаторов из Table1 (id int, txt ntext) с ключевыми сообщениями из Table2 (kwd nvarchar (255)), которые существуют в поле ntext.Количество вхождений сложно, и вам придется написать UDF, предпочтительно CLR, чтобы получить его.

Я определил слово как все, что отделяется пробелом или открывают круглые скобки слева и пробел, закрывают скобками, запятую, точку или точку с запятой справа.Вы можете добавить больше условий, например, кавычки, двойные кавычки и т. Д.

Select Table1.id, Table2.kwd 
  From Table1
 Cross Join Table2 
 Where patindex(N'%[ (]'+Table2.kwd+N'[ ,.;)]%',N' '+cast(Table1.txt as nvarchar(max))+N' ')>0
Order by id, kwd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...