我正在虚拟表的多列中搜索多个文本。我检查了this个帖子,这个搜索多列中的单个单词。
我检查了以下
SELECT * FROM table WHERE table MATCH (('A:cat OR C:cat') AND ('A:dog OR C:dog')
但似乎AND条件不起作用。
编辑我尝试了以下内容,
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*'));
这两个查询都返回了相同的 109 结果。然后我尝试了@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*)'
但这会返回 0 结果。
有任何建议我在这里缺少!!
答案 0 :(得分: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
答案 1 :(得分:0)
对于 OR 条件类型 OR 之间,即:re.compile
对于AND条件,只需不要输入任何内容,即:MATCH ('A:cat OR C:cat')