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

时间:2014-07-21 22:47:55

标签: android sql sqlite ormlite

我正在寻找ORMLite问题的解决方案,其中包含3个连接表和2个相似参数。

数据库中有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) 

1 个答案:

答案 0 :(得分:1)

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

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

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

通过这个声明,我得到了我正在寻找的数据。