2012-03-22 14 views
6

में सबक्वायरी से चयन करना मैं डीक्यूएल में एक सबक्वायरी के परिणामों से एक चयन करना चाहता हूं। एसक्यूएल में निम्नलिखित कर के बराबर:डीक्यूएल

SELECT u FROM (
    SELECT u, COUNT(u) as total 
     FROM Utterance u LEFT JOIN u.recordings r 
     WHERE r.speaker IS NULL OR r.speaker <> 5 
     GROUP BY u.id 
    ) matched WHERE total < 5 

:

SELECT * FROM (SELECT foo1,foo2 FROM bar) where foo1='something'; 
समस्या मैं में चल रहा

यह शिकायत है कि कि

Error: Class '(' is not defined 

वास्तविक DQL कि कि त्रुटि पैदा करता है तो दोहराने के लिए, मैं उप क्वेरी से चयन कैसे कर सकता हूं?

उत्तर

5

DQL का उपयोग करते हुए मैं बहुत यकीन है कि संभव नहीं है हूँ, लेकिन आप जांच करना चाह सकते यदि आप वास्तव में इसकी जरूरत:

Doctrine Native SQL। (examples, उसी पृष्ठ से परमालिंक)

यह अधिक जटिल है लेकिन यह आपको मूल क्वेरी भेजने और इसे निष्पादित करने की स्वतंत्रता भी देता है (मेरे लिए मुश्किल हिस्सा ऑब्जेक्ट हाइड्रेशन था)।

दूसरी ओर, पिछले कोड खंड कुछ भी आप क्या हासिल करने की कोशिश कर रहे हैं, उसके जैसा दिखता है, तो, वहाँ एक आसान तरीका है कि कोई उप प्रश्नों की आवश्यकता है:

SELECT u 
    FROM Utterance u LEFT JOIN u.recordings r 
    WHERE r.speaker IS NULL OR r.speaker <> 5 
    GROUP BY u.id HAVING COUNT(u) < 5 

आशा इस मदद करता है ...

+0

मेरी अंतिम क्वेरी उस से थोड़ी अधिक जटिल होने की आवश्यकता थी, हालांकि मुझे नहीं पता था कि आप इस तरह के टिप के लिए धन्यवाद कर सकते हैं! अंत में मैं मूल एसक्यूएल और ऑब्जेक्ट हाइड्रेशन के साथ गया। धन्यवाद! – drewag

+3

@ ड्रूगैग, और देशी क्वेरी के साथ आपका अंतिम परिणाम यहां साझा किए जाने पर बहुत ही रोचक होगा। (मुझे पता है कि यह लगभग 4 साल पहले है लेकिन ...) धन्यवाद –

+2

क्या आपने ऑब्जेक्ट हाइड्रेशन के साथ अपनी समस्या को साफ तरीके से हल करने का प्रबंधन किया था? –