SQL Server:如何比较两个表

时间:2010-08-10 10:04:37

标签: sql sql-server

我在比较SQL Server中的两个表时遇到问题。

我有第一个表[Table1],其中包含用于存储内容的文本列,第二个表[table2]包含我的关键字列。

现在,我想将所有关键字与我的内容进行比较,并获取包含内容中出现次数的关键字列表。 (足够清楚?)

2 个答案:

答案 0 :(得分:2)

什么版本的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

答案 1 :(得分:0)

这将返回Table1(id int,txt ntext)中的ID列表,其中包含来自Table2(kwd nvarchar(255))的关键字符,它存在于ntext字段中。出现次数很棘手,您必须编写UDF(最好是CLR 1)来获取它。

我将单词定义为由空格分隔的所有内容或从左侧和空格中打开括号,从右侧关闭parenhesize,逗号,点或分号。您可以添加更多条件,例如报价,双引号等。

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