2016-09-26 46 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