我有两张桌子:
FirstTable
===============================
Id int primary key identity ,
Text varchar(4000)
Phrase
===============================
Id int primary key identity ,
Text varchar(4000) ,
ExcludingText varchar(4000)
我需要从第一个表中过滤包含词组表的Text
列值的行,而不要包含同一行的ExcludedText
值。
表之间不存在任何关系,对于FirstTable
的每一行,我必须检查每个现有组合(包括Text,不包括ExcludedText)。
答案 0 :(得分:0)
您可以根据Phrase
表的内容动态构建全文查询。
declare @FullTextCondition as varchar(max)
set @FullTextCondition = STUFF(
(
SELECT '"' + Text + '" AND NOT "' + ExcludingText + '" AND '
FROM Phrase
FOR XML PATH(''), TYPE
).value('.', 'varchar(max)'),
1, 0, ''
)
-- remove trailing ' AND '
set @FullTextCondition = SUBSTRING(@FullTextCondition, 0, LEN(@FullTextCondition) - 3)
-- now perform your full text search
SELECT *
FROM FirstTable
WHERE CONTAINS(*, @FullTextCondition)
例如,如果您的Phrase
表包含此数据:
Id Text ExcludingText
-------------------------------------
1 good bad
2 ok not ok
然后您的全文查询(@FullTextCondition
)将如下所示:
'"good" AND NOT "bad" AND "ok" AND NOT "not ok"'
当然,请考虑Phrase
表的大小。如果它非常大,那么它将影响性能