繁体   English   中英

需要调整我的FTS4 SQLite查询

[英]Need to tweak my FTS4 SQLite query

以下查询在Android上不起作用,并引发以下异常

Unable to use function MATCH in the requested context

这是一个非常复杂的查询,因此我正在研究简化它的方法。 有关信息,此查询可使用sqlite-jdbc-3.715驱动程序在我的计算机上的同一数据库上sqlite-jdbc-3.715

SELECT * FROM stop_times WHERE 
    departure_time  >= 1000-125
    AND 
    departure_time <= 1000+180 
    AND stop_id IN 
        (SELECT _id FROM stop_sequences WHERE stop_ids MATCH '"642," OR "642," OR ",642"')
    AND _id IN 
        (SELECT _id FROM trips WHERE service_id IN (SELECT _id FROM calendar WHERE wednesday=1))
ORDER BY departure_time ASC

我认为我的FTS表声明还可以:

CREATE VIRTUAL TABLE stop_sequences USING fts4(
    _id INTEGER PRIMARY KEY,
    stop_ids TEXT
);

SQL专家可以帮助我吗? 谢谢

编辑:我发现,即使是最简单的查询,如

SELECT _id FROM stop_sequences WHERE stop_ids MATCH '"642";

失败并出现相同的错误。 我已经在代码中其他地方的另一个数据库上使用了MATCH语句,它一点也不抱怨。 错误消息中提到的上下文是否与Android的Context

创建此表时,您指定了USING fts4() ,对吗? 如果没有,您的全文查询将根本无法进行。

您可以尝试使用联合更改查询

SELECT * FROM stop_times WHERE 
    departure_time  >= 1000-125
    AND 
    departure_time <= 1000+180 
    AND stop_id IN 
        (SELECT _id FROM stop_sequences 
         WHERE stop_ids 
         MATCH '"642,"'
         UNION
         SELECT _id FROM stop_sequences 
         WHERE stop_ids 
         MATCH '",642"'
         )
    AND _id IN 
        (SELECT _id FROM trips WHERE service_id IN (SELECT _id FROM calendar WHERE wednesday=1))
ORDER BY departure_time ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM