我正在尝试使用ORMLite根据连接表中的条件查询表。
以下是我将如何表达我想在tsql中编写的查询:
select * from media m inner join file f on m.fileId = f.fileId
where m.isNew = 1 OR f.isNew = 1
结果应该是媒体记录列表,其中媒体记录或相应的文件记录isNew = 1.
我已阅读有关在ORMLite中使用OR的文档,但所有示例都使用单个表,而不是加入。同样,我已经阅读了有关连接的文档,但是没有一个示例包含跨越两个表的where子句。除了原始查询之外还有什么方法可以做到这一点吗?
我看了一下这个问题:https://stackoverflow.com/a/12629645/874782似乎问了同样的问题,但是接受的答案产生了一个AND查询,而不是一个OR。这是我用来测试该理论的代码:
public List<Media> getNewMedia() {
Session session = getSession();
Account account = session.getSelectedAccount();
ContentGroup contentGroup = account.getSelectedContentGroup();
List<Media> results = null;
try {
QueryBuilder<Category, Integer> categoryQueryBuilder = getHelper().getCategoryDao().queryBuilder();
categoryQueryBuilder.where().eq("group_id", contentGroup.getId());
QueryBuilder<MediaCategory, Integer> mediaCatQb = getHelper().getMediaCategoryDao().queryBuilder();
mediaCatQb = mediaCatQb.join(categoryQueryBuilder);
QueryBuilder<FileRecord, Integer> fileQueryBuilder = getHelper().getFileDao().queryBuilder();
fileQueryBuilder.where().ge("lastUpdated", contentGroup.getLastDownload());
QueryBuilder<Media, Integer> mediaQb = getHelper().getMediaDao().queryBuilder();
mediaQb.where().eq("seen", false);
// join with the media query
results = mediaQb.join(fileQueryBuilder).join(mediaCatQb).query();
} catch (SQLException e) {
Log.e(TAG, "Sql Exception", e);
}
return results;
}
为了完成,这是查询一个比我上面给出的更复杂的例子,这个用tsql表示将是
select * from Media m join FileRecord f on m.fileRecordId = f.fileRecordId
where m.seen = false OR f.lastUpdated >= lastUpdateDate
当我运行它时,它实际上是在进行AND查询,这是我期望的基于两个连接的独立where子句。
我认为关键问题是where子句固有地绑定到表,因为它是在一个QueryBuilder对象上执行的,该对象来自特定于该表的Dao。我怎么能绕过这个?
答案 0 :(得分:0)
我认为您要找的是joinOr
在ORMLite docs中搜索它。
与join(QueryBuilder)类似,但它结合了两个WHERE语句 使用SQL&#34; OR&#34;。
查询构建器