我正在寻找具有 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/