android - ORMLITE 使用 2 个搜索参数加入 3 个表

标签 android sql sqlite ormlite

我正在寻找具有 3 个连接表和 2 个类似参数的 ORMLite 问题的解决方案。

数据库中有5张表(3张主表,2张从属表)。数据库构建如下:

警报 >> AlarmEvent << 事件 >> EventCalendar << 日历

现在,我尝试获取包含在一个特殊警报中并且在一个日历上引用的所有事件。但是当我运行查询时,我总是看到所有事件,但我不知道如何解决这个问题。 这是我针对此查询的最新功能。

    private PreparedQuery<EventItem> makeEventsForCalendarAndAlarmQuery(
        int Alarmid, int CalId) throws SQLException {

    QueryBuilder<AlarmEntry, Integer> alarmQb = getHelper()
            .getAlarmListDao().queryBuilder();
    QueryBuilder<AlarmEvent, Integer> alarmEventQb = getHelper()
            .getAlarmEventDao().queryBuilder();
    QueryBuilder<EventItem, Integer> eventQb = getHelper()
            .getEventItemDao().queryBuilder();
    QueryBuilder<CalendarEvent, Integer> calendarEventQb = getHelper()
            .getCalendarEventDao().queryBuilder();
    QueryBuilder<CalendarDb, Integer> calendarDbQb = getHelper()
            .getCalendarDbDao().queryBuilder();

    alarmEventQb.leftJoin(alarmQb);
    eventQb.leftJoin(alarmEventQb);
    calendarEventQb.leftJoin(eventQb);
    calendarDbQb.where().like(CalendarDb.CAL_ID_FIELD_NAME, CalId);
    calendarDbQb.join(calendarEventQb);
    eventQb.join(calendarDbQb);
    return eventQb.prepare();
}

我必须如何设置查询以仅获取引用一个选定警报和一个选定日历的事件?

编辑: SQL 语句应该看起来像这样。我是 sql 初学者,所以可能语句不正确:

SELECT * FROM EventItem INNER JOIN (CalendarEvent INNER JOIN  CalendarDb WHERE id = calid) INNER JOIN (AlarmEvent INNER JOIN AlarmEntry where AlarmEntry.id = alarmId) 

最佳答案

好的,问题似乎已经解决了。 我设置了以下代码:

    calendarEventQb.where().eq(CalendarEvent.CALENDARDB_ID_FIELD_NAME, CalId);
    alarmEventQb.where().eq(AlarmEvent.ALARMENTRY_ID_FIELD_NAME, Alarmid);

    eventQb.join(calendarEventQb).join(alarmEventQb);

通过这条语句,我得到了我正在寻找的数据。

关于android - ORMLITE 使用 2 个搜索参数加入 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876120/

相关文章:

android - 向 RecyclerView ListAdapter 提交新列表时,差异检查始终为 areContentsTheSame() 返回 true

android - 做一个内接于圆的等边三角形,知道一个顶点或一条边

sql - perl + postgresql 代码导致 Pg.pm 出现问题

objective-c - 使用 sqlite3 进行类型转换

java - Select 语句返回 0 行 : impossible

java - Android 网络服务 asp .asmx

java - 使用 Robolectric 更改 Android 连接

MySQL查找所有列的可能值的行数小于n的行

sql - 错误: syntax error at or near "and"

android - 无法在 Fragment Activity 类下创建数据库管理器