ORMLite kullanarak bir birleşim tablosundaki ölçütleri temel alarak bir tabloyu sorgulamaya çalışıyorum. Sonuç medya kayıtlarını içeren bir liste medya kaydı veya ilgili dosya kayıt ya sahiptir isNew = 1 olmalıdırORMLite veya Query'de birden çok tabloya
select * from media m inner join file f on m.fileId = f.fileId
where m.isNew = 1 OR f.isNew = 1
: Burada
ben TSQL içinde yazmaya çalışıyorum sorguyu ifade şekli şöyledir
ORMLite içinde OR kullanarak belgelerini okudum, ancak tüm örnekler katılmadan tek bir tablo kullanıyor. Aynı şekilde, katılma belgelerini okudum, ancak örneklerin hiçbiri her iki tabloyu da kapsayan bir yan tümcesi içeriyor. Bunu yapmak için bir ham sorgunun dışında bir yolu var mı?
Bu soruya bir göz attım: https://stackoverflow.com/a/12629645/874782 ve aynı şeyi soruyor gibi görünüyor, ancak kabul edilen yanıt bir VEYA değil, bir OR sorgusu üretir. Burada bu teorinin test edilmesi için kullanılan zaman kodu: tamamlanması uğruna
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;
}
bu yukarıda verdi olandan biraz daha karmaşık bir örneğin sorgulama, bu
olacaktır TSQL ifadeselect * from Media m join FileRecord f on m.fileRecordId = f.fileRecordId
where m.seen = false OR f.lastUpdated >= lastUpdateDate
Çalıştırdığımda, aslında bir AND sorgusu yapıyor; bu, bağımsız bir ifadeyle, iki birleşime dayanarak beklediğim şey.
Anahtar sorun, bir tablonun bir tablaya doğal olarak bağlı olmasıdır, çünkü bu tabloya özgü bir Dao'dan gelen bir QueryBuilder nesnesinde gerçekleştirilir. Bunu nasıl aşabilirim?