在具有多个表的 sqlite 数据库中检索链接对象列表的查询是啥?

Posted

技术标签:

【中文标题】在具有多个表的 sqlite 数据库中检索链接对象列表的查询是啥?【英文标题】:What is the query for retrieving a list of linked objects in a sqlite database with multiple tables?在具有多个表的 sqlite 数据库中检索链接对象列表的查询是什么? 【发布时间】:2016-11-02 20:24:49 【问题描述】:

我已经制作了一个包含以下表格的 sqlite 数据库:

public void onCreate(SQLiteDatabase db) 
    db.execSQL("CREATE TABLE "+TABLE_CITY+"("
            +KEY_ID+" INTEGER PRIMARY KEY, "
            +KEY_CITY+" TEXT, "+KEY_COUNTRY+" TEXT)");
    db.execSQL("CREATE TABLE "+TABLE_DIARY+"("
            +KEY_ID+" INTEGER PRIMARY KEY, "
            +KEY_DATE+" TEXT, "+KEY_STORY+" TEXT)");
    db.execSQL("CREATE TABLE "+TABLE_CITY_DIARY+"("
            +KEY_ID+" INTEGER PRIMARY KEY, "
            +KEY_CITY_ID+" TEXT, "+KEY_DIARY_ID+" TEXT)");

现在我想检索属于某个城市的所有日记条目的列表(例如,巴塞罗那包含 3 个日记条目和罗马 5,但我只想要属于巴塞罗那的 3 个日记条目的列表)。 我为此做了一个方法,但我不确定查询应该是什么。

    public List<Diary> getDiariesByCity(String city_name)
    List<Diary>diaries=new ArrayList<Diary>();
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor curs=db.rawQuery("SELECT * FROM "+TABLE_DIARY........,
            new String[]city_name);
    if(curs.moveToFirst())
        do
            Diary diary=new Diary();
            diary.setId(curs.getInt(curs.getColumnIndex(KEY_ID)));
            diary.setDate(curs.getString(curs.getColumnIndex(KEY_DATE)));
            diary.setStory(curs.getString(curs.getColumnIndex(KEY_STORY)));
            diaries.add(diary);
        while(curs.moveToNext());
    return diaries;

【问题讨论】:

【参考方案1】:

你应该像这样使用 INNER JOIN:

Cursor curs=db.rawQuery("SELECT * FROM " +  TABLE_CITY_DIARY + 
+ " INNER JOIN " + TABLE_CITY + " ON " + TABLE_CITY_DIARY + "." + KEY_CITY_ID + "=" + TABLE_CITY + "." + KEY_ID 
+ " INNER JOIN " + TABLE_DIARY + " ON " + TABLE_CITY_DIARY + "." + KEY_DIARY_ID + "=" + TABLE_DIARY + "." + KEY_ID 
+ " WHERE " +  TABLE_CITY + "." + KEY_CITY + "=?", new String[]city_name);

【讨论】:

谢谢,还不知道 INNER JOIN,但它确实有效。唯一的小错误是最后一个参数中的 KEY_COUNTRY 应该是 KEY_CITY。

以上是关于在具有多个表的 sqlite 数据库中检索链接对象列表的查询是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有多个表的 IDataReader 中检索值

SQLITE DB如何将多个表的数据保存在一个文件中?

使用 C# 从 sqlite 3 数据库中检索存储在整数字段中的字符串数据

如何从具有多个关联的两个 MySQL 表中检索数据

检索在 sqlite 数据库中插入的所有行,并在包含标签的表视图单元格中显示为具有不同部分的子视图

Laravel:通过另一个表从具有关联表的表中检索记录