2011-01-09 8 views
12

मैं एक जेपीक्यूएल क्वेरी लिख रहा हूं और मेरे पास निम्न परिदृश्य है। मेरे पास एक प्रश्न इकाई है जिसमें टैग की एक सूची है। मैं उन सभी प्रश्नों का चयन करना चाहता हूं जिनमें टैग की एक दी गई सूची शामिल है। मैं जेपीए के साथ ऐसा कैसे करूं?एक इकाई में ऐसी सूची है जहां किसी अन्य सूची का सबसेट है

मैं तरह से प्रश्न एक्स का चयन एक्स कुछ करना चाहते हैं जहां x.tags 'सभी शामिल हैं': टैग

उत्तर

3

[यह किसी भी नहीं सभी के लिए खोज करता; कृपया अन्य सही उत्तरों देखें।]

आप सूची को पैरामीटर के रूप में सेट कर सकते हैं।

SELECT x FROM Question x WHERE x.tags IN :tags 

भी (: टैग) का उपयोग करने का प्रयास करें, क्योंकि यह आपके द्वारा उपयोग किए जा रहे जेपीए कार्यान्वयन पर निर्भर करता है।

+1

मैं थोडी देर में यह परीक्षण किया जाएगा। मुझे पता है कि अगर यह टैग टैग की सूची में है तो यह जांच कर रहा है। लेकिन अब मेरी स्थिति में परीक्षण शामिल है यदि टैग की एक सूची टैग की दूसरी सूची का सबसेट है। – joshua

+0

समाधान क्या था? – Phil

+0

हाँ। वह काम किया। – joshua

5

इस तरह का प्रयास करें: मेरे लिए

select distinct q from Question q join q.tags as t 
where t.name in (:tags) 
group by q.id, q.author, q.title, q.content,q.postedAt 
having count(t.id) = :size 
+0

यह उत्तर MySQL का उपयोग कर मेरे लिए काम किया। @ नयन-वाडेकर जवाब एसक्यूएल व्याकरण अपवाद दे रहा था। – malloc4k

4

Nayans समाधान does'nt काम करते हैं। यह प्रत्येक 'एक्स' का चयन करता है जो दिए गए संग्रह 'टैग' के पहले (या किसी भी?) प्रविष्टि से मेल खाता है। यदि यह वास्तव में आपके लिए काम करता है, तो आपको फिर से आवेदन करना चाहिए;) जेपीए निर्भर हो सकता है - मुझे नहीं पता।

युक्ति: प्रयास करें Krzysztofs समाधान या उपयोग मेरा:

SELECT x FROM Question x 
WHERE x IN (
    SELECT y FROM Question y 
    INNER JOIN y.tags yt 
    WHERE yt IN (
     :tags 
    ) 
    GROUP BY y 
    HAVING COUNT(DISTINCT yt) = (
     :tagsSize // should be clear ;) 
    ) 
) 
+0

आपके द्वारा दो टैग की आवश्यकता वाले टैगिज़ चेक को बेवकूफ़ बनाया जा सकता है। और सवाल दो है लेकिन केवल एक मेल खाता है? – Amalgovinus

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