2013-08-09 9 views
5

मैं ORMLite का उपयोग कर किसी तालिका में मानदंडों के आधार पर एक तालिका क्वेरी करने का प्रयास कर रहा हूं।एकाधिक तालिकाओं में ORMLite या क्वेरी

select * from media m inner join file f on m.fileId = f.fileId 
where m.isNew = 1 OR f.isNew = 1 

परिणाम जहां या तो मीडिया रिकॉर्ड या इसी फ़ाइल रिकॉर्ड है isNew = 1 मीडिया रिकॉर्ड की एक सूची होना चाहिए:

यहाँ कैसे मैं क्वेरी मैं TSQL में लिखने के लिए कोशिश कर रहा हूँ व्यक्त होता है

मैंने ORMLite का उपयोग करने के लिए प्रलेखन के माध्यम से पढ़ा है, लेकिन सभी उदाहरण एक ही तालिका का उपयोग करते हैं, शामिल नहीं होते हैं। इसी प्रकार मैंने शामिल होने पर प्रलेखन पढ़ा है, लेकिन इनमें से किसी भी उदाहरण में कोई सार नहीं है जो दोनों तालिकाओं को फैलाता है। क्या ऐसा करने के लिए कच्ची पूछताछ के अलावा कोई रास्ता है?

मैंने इस प्रश्न पर एक नज़र डाली: https://stackoverflow.com/a/12629645/874782 और ऐसा लगता है कि एक ही बात पूछती है, लेकिन स्वीकृत उत्तर एक और क्वेरी उत्पन्न करता है, न कि एक 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 

जब मैं इसे चलाता हूं, तो यह वास्तव में एक और क्वेरी कर रहा है, जो मैं उम्मीद करता हूं कि स्वतंत्र रूप से दो खंडों के आधार पर मैं अपेक्षा करता हूं।

मुझे लगता है कि मुख्य मुद्दा यह है कि जहां एक क्लॉज मूल रूप से किसी तालिका से बंधे हैं, क्योंकि यह एक क्वेरी बाउडर ऑब्जेक्ट पर किया जाता है जो उस तालिका के लिए विशिष्ट दाओ से आता है। मैं इसके पास कैसे आ सकता हूं?

उत्तर

0

मुझे लगता है कि आप क्या देख रहे हैं joinOrORMLite docs में इसके लिए खोजें।

शामिल होने की तरह (QueryBuilder) लेकिन यह SQL 0 OR35 के साथ दो क्वेरी बिल्डर्स के WHERE कथन को जोड़ता है।

संबंधित मुद्दे