2

我正在尝试编写一个文本搜索查询,该查询将返回在一个部分中包含某个值且在另一部分中不包含某个值的记录。

像这样的东西:

SELECT * FROM text_search_table WHERE (contains(text_search, 
'(value1 within section1) AND (NOT(value2) within section2)') > 0)

此查询的语法不正确,因为 NOT 运算符需要两个操作数。我还尝试使用 % 作为第一个操作数:

% NOT value2 within section2

它也不起作用。

有没有办法在文本搜索中实现我所需要的?

谢谢你。

4

1 回答 1

1

我相当确定(不是 100%)您不能以您想要的方式将 NOT 运算符与 WITHIN 一起使用。标准方法可能是执行以下操作:

select * 
  from text_search_table 
 where contains(text_search, 'value1 within section1') > 0
   and not contains(text_search, 'value2 within section2') > 0

但是,您可以稍微作弊。如果您知道某些文本出现在第二部分中,则可以使用 NOT 运算符来搜索该文本,而不是您要查找的内容:

select * 
  from text_search_table 
 where contains(text_search
     , 'value1 within section1 and (known_value not value2) within section2') > 0

由于存在已知值,因此它始终位于该部分内。如果value2 该部分内,则不返回任何内容;如果它不在该部分内,则条件为假,您可以检索它。

于 2013-09-07T10:43:01.183 回答