2016-09-26 26 views
1

我在虚拟表的多个列中搜索多个文本。我已检查this线程,此搜索多个列中的单个词。如何使用SQLite FTS3匹配表中多列中的多个文本?

我有以下

SELECT * FROM table WHERE table MATCH (('A:cat OR C:cat') AND ('A:dog OR C:dog') 

检查,但它似乎和条件不工作。

编辑我有以下尝试,

Select count (*) FROM Table1 WHERE TBL_VIRTUAL MATCH (('A:D* AND B:D* AND C:D*') OR ('A:tar* AND B:tar* AND C:tar*')); 
Select count (*) FROM Table1 WHERE TBL_VIRTUAL MATCH (('A:D* AND B:D* AND C:D*') AND ('A:tar* AND B:tar* AND C:tar*')); 

这些都查询返回我一样结果。然后,我试了一下@redneb提到在下面的回答:

SELECT * FROM table WHERE table MATCH '(A:D* OR B:D* OR C: D*) AND (A:tar* OR B:tar* OR C:tar*)' 
SELECT * FROM table WHERE table MATCH '(A:D* OR B:D* OR C: D*) OR (A:tar* OR B:tar* OR C:tar*)' 

但这回结果。

任何建议我在这里失踪!

回答

2

试试这个:

SELECT * 
FROM mytable 
WHERE mytable MATCH '(A:cat OR C:cat) AND (A:dog OR C:dog)'; 

但是,我怀疑,下面的查询将执行速度更快:

SELECT * 
FROM mytable 
WHERE mytable MATCH '(A:cat AND C:dog) OR (A:dog AND C:cat)'; 

,相当于第一个。

编辑:这是一个完整的例子。让我们先来创建和填充表:

CREATE VIRTUAL TABLE mytable USING fts3(A, C); 
INSERT INTO mytable VALUES 
    ('foo','bar'), 
    ('dog','dog'), 
    ('cat','cat'), 
    ('dog','cat'), 
    ('cat','dog'); 

然后查询按预期工作:

sqlite> SELECT * FROM mytable WHERE mytable MATCH '(A:cat AND C:dog) OR (A:dog AND C:cat)'; 
A   C   
---------- ---------- 
dog   cat  
cat   dog  
+0

谢谢,我已经编辑我用你的建议的条件问题。但它不会产生预期的结果。请检查。 – CoDe