我需要一个选择,它将返回如下结果:

SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3'

我需要所有的结果,即这包括字符串'word2 word3 word1'或'word1 word3 word2'或任何其他组合的三个。

结果中必须包含所有的单词。


当前回答

Use:

SELECT * FROM MyTable WHERE Column1 Like "*word*"

这将显示column1的部分值包含word的所有记录。

其他回答

SELECT * FROM MyTable WHERE 
Column1 LIKE '%word1%'
AND Column1 LIKE '%word2%'
AND Column1 LIKE  '%word3%'

根据编辑问题将OR更改为AND。

用"in"代替:

Select *
from table
where columnname in (word1, word2, word3)

实现问题中提到的最简单的方法之一是使用CONTAINS和NEAR或'~'。例如,下面的查询将为我们提供具体包括word1、word2和word3的所有列。

SELECT * FROM MyTable WHERE CONTAINS(Column1, 'word1 NEAR word2 NEAR word3')

SELECT * FROM MyTable WHERE CONTAINS(Column1, 'word1 ~ word2 ~ word3')

此外,CONTAINSTABLE根据“word1”、“word2”和“word3”的接近度为每个文档返回一个排名。例如,如果一个文档包含这样一句话,“word1是word2和word3”,那么它的排名就会很高,因为这些术语比其他文档中更接近彼此。

我们还可以使用proximity_term来查找单词位于列短语内它们之间的特定距离内的列。

如果你正在使用Oracle数据库,那么你可以使用包含查询来实现这一点。包含查询比同类查询快。

如果你需要所有的单词

SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 and word2 and word3', 1) > 0

如果你需要什么词的话

SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 or word2 or word3', 1) > 0

包含列上CONTEXT类型的需要索引。

CREATE INDEX SEARCH_IDX ON MyTable(Column) INDEXTYPE IS CTXSYS.CONTEXT

相当缓慢,但工作方法包括任何单词:

SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
   OR column1 LIKE '%word2%'
   OR column1 LIKE '%word3%'

如果你需要所有的单词都出现,使用这个:

SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
  AND column1 LIKE '%word2%'
  AND column1 LIKE '%word3%'

如果您想要更快,您需要研究全文搜索,这对于每种数据库类型都是非常特定的。