更新
最后我用这种方式得到过滤结果。
SELECT * FROM statuses WHERE _id NOT IN (
SELECT DISTINCT statuses._id FROM statuses, filtered_sources WHERE statuses.source LIKE '%'||filtered_sources.text||'%'
UNION
SELECT DISTINCT statuses._id FROM statuses WHERE statuses.screen_name IN(SELECT filtered_users.text FROM filtered_users)
UNION
SELECT DISTINCT statuses._id FROM statuses, filtered_keywords WHERE statuses.text LIKE '%'||filtered_keywords.text||'%'
);
为什么我使用这种方式而不是直接组合结果?
我想使用query()
方法而不是rawQuery()
在 Android 中。
@zapi 和 @sixfeetsix ,非常感谢,你的回答给了我这个想法!
在此处下载 sqlite 数据库进行测试 http://db.tt/ZsEwE9TV
我有一个 sqlite 数据库,其中包含三个表:statuses、filtered_keywords、filtered_sources。
每个表中的列:
状态:
|_id|text|source|
过滤关键字和过滤来源:
|_id|text|
现在我想过滤查询结果中statuses
包含的单词filtered_keywords
和filtered_sources
。
我知道我可以LIKE
在 sqlite 中使用,但我不能像IN
函数一样使用它。
SELECT * FROM statuses WHERE text in (SELECT text FROM filtered_sources);
所以我必须先查询filtered_sources
andfiltered_keywords
中的所有数据Cursor
,然后构建一个很长的where子句,这真的很慢。
有没有简单的方法来获得过滤结果?