2013-08-09 23 views
5

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 ifade
select * 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?

cevap

0

Aradığınızı düşünüyorum joinOr için ORMLite docs içinde arayın.

gibi (QueryBuilder) katılmak ama bu SQL "VEYA" ile iki sorgu inşaatçılar WHERE ifadelerini birleştirir.

İlgili konular