使用IN()的Android SQLite查询

时间:2013-01-11 19:16:11

标签: java android sqlite android-sqlite

我有以下型号

类别(id,name,is_active) 地方(id,name,category_id,.....)

根据用户偏好,类别将为0 or 1。根据此偏好设置,我想查询categories.is_active = 1

的所有地点

我认为有两种方法

第一种方法

  1. 查询并获取其is_active = 1
  2. 的所有类别
  3. 从上面检索到的类别ID集合中获取所有地点的列表。
  4. 第二种方法

    使用JOIN编写RawQuery并设置条件。

    哪种方法可以优化速度?

    我尝试了什么?

    // Get Active Categories
    public Cursor getActiveCategories() {
        return db.query(TABLE_CATEGORIES, new String[] { COLUMN_ID,
                COLUMN_NAME, COLUMN_SLUG, COLUMN_ACTIVE }, COLUMN_ACTIVE + "="
                + "'1'", null, null, null, COLUMN_NAME, null);
    }
    
    
    // Get Places
    public Cursor getPlaces() {
        return db.query(TABLE_PLACES, new String[] { COLUMN_ID, COLUMN_NAME },
                " type IN ('1','2')", null, null, null, null);
    }
    

    在上面的代码中,如何动态插入类型IN ('1','2'),以便我可以从第一个方法的结果中填充它?

1 个答案:

答案 0 :(得分:3)

单个rawQuery几乎总是比两个单独的查询更快。由于rawQuery中没有任何参数,因此非常简单,例如;

SELECT places.* 
FROM places 
JOIN categories
  ON places.category_id = categories.id
WHERE categories.is_active = 1