如何使用SQLite FTS3匹配表中的多列?

Uni*_*orn 15 sql sqlite

假设我有一个包含A,B,C,D列的表,我想在A列和C列上进行匹配

我看到你可以匹配sqlite中的单个列或所有列,即

- match column A
select * from table where A match 'cat' 

- match all columns
select * from table where table match 'cat'
Run Code Online (Sandbox Code Playgroud)

是否可以只匹配A列和C列?如果没有,你们怎么解决这个问题?

谢谢你的建议!

小智 29

我不认为您可以在单个FTS查询中使用多个MATCH运算符.使用column_name:target_term可以使用一个全文搜索来搜索多个列.

SELECT * FROM table WHERE table MATCH 'A:cat OR C:cat'
Run Code Online (Sandbox Code Playgroud)

http://www.sqlite.org/fts3.html#termprefix


Pet*_*ete 6

您可以指定要匹配的整个表,而不是指定要匹配的列.例如:

-- Example schema
CREATE VIRTUAL TABLE mail USING fts3(subject, body);

-- Example table population
INSERT INTO mail(docid, subject, body) VALUES(1, 'software feedback', 'found it too slow');
INSERT INTO mail(docid, subject, body) VALUES(2, 'software feedback', 'no feedback');
INSERT INTO mail(docid, subject, body) VALUES(3, 'slow lunch order',  'was a software problem');

-- Example queries
SELECT * FROM mail WHERE subject MATCH 'software';    -- Selects rows 1 and 2
SELECT * FROM mail WHERE body    MATCH 'feedback';    -- Selects row 2
SELECT * FROM mail WHERE mail    MATCH 'software';    -- Selects rows 1, 2 and 3
SELECT * FROM mail WHERE mail    MATCH 'slow';        -- Selects rows 1 and 3
Run Code Online (Sandbox Code Playgroud)


Kru*_*hah 5

对于使用MATCH的多列条件,将UNION用作“ OR”,将INTERSECT用作“ AND”

SELECT * FROM TBL_VIRTUAL_APPOINTMENT WHERE PATIENT_PREFIX MATCH 'D*' 
UNION 
SELECT * FROM TBL_VIRTUAL_APPOINTMENT WHERE patient_first_name MATCH 'K*'
Run Code Online (Sandbox Code Playgroud)