私はORMLiteを使用して、結合テーブルから基準に基づいてテーブルを照会しようとしています。ここで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を持っているメディアレコードのリストでなければなりません。
私が使用してOR ORMLiteにドキュメントを読んでいるが、例のすべてが参加していない、単一のテーブルを使用します。同様に、私は上の結合ドキュメントを読んでいるが、例のいずれもが、両方のテーブルにまたがる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句を使用した2つの結合に基づいて予測されます。
は、私は重要な問題は、それがそのテーブルに固有のダオから来てQueryBuilderオブジェクト上で実行されているため、where句は、本質的に、テーブルに関連付けられていることだと思います。どうすればこの問題を回避できますか?