2013-05-02 72 views
0

下面的查詢不會在Android上工作,並拋出以下異常需要調整我的FTS4 SQLite的查詢

Unable to use function MATCH in the requested context

這是一個非常複雜的查詢,所以我想辦法解決簡化它。對於信息,這個查詢的工作同一個數據庫在我的電腦上與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有什麼關係?

+0

變化MATCH喜歡 – 2013-05-02 00:20:12

+0

我認爲這將有一個壞的性能損失,我的stopsequences表是相當大的 – chopchop 2013-05-02 00:33:02

+0

SQLite沒有MATCH – 2013-05-02 00:33:53

回答

1

?如果不是,那麼全文查詢根本不起作用。

+0

是的我的CREATE是在問題中。另外,當我在我的shell中使用sqlite3命令運行它時,此查詢正常工作 – chopchop 2013-05-06 23:41:17

+1

好吧,我真的很愚蠢,我正在使用舊版本的數據庫,我忘記用fts4表更新到新版本。你的回答讓我檢查,所以我應該接受嗎? – chopchop 2013-05-06 23:56:14

+0

@chopchop,是的,你應該,因爲它解決了你的問題。 – 2013-05-07 06:46:30

0

你可以嘗試當你,你指定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 
+0

不工作,仍然是相同的錯誤 – chopchop 2013-05-06 23:04:31