【发布时间】:2014-07-21 22:47:55
【问题描述】:
我正在寻找具有 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)
【问题讨论】:
标签: android sql sqlite ormlite