मेरे पास तीन टेबल, 'ए', 'बी' और 'सी' हैं। मेरे पास 'ए' और 'बी' पर पूछताछ है, लेकिन मैं एक ऐसा क्षेत्र जोड़ना चाहता हूं जो मुझे बताता है कि एक या अधिक (मैं 'कितनी परवाह नहीं करता)' सी 'जो' ए 'के लिए विदेशी कुंजी है।अगर कोई बाएं किसी भी पंक्ति में लौटता है तो '1' वापस करने का एक बेहतर तरीका?
SELECT A.A_id, A.col_2, col_3, B.col_2, A.col_4
count(C.id) as C_count
FROM A
JOIN B ON (A.B_id = B.B_id)
LEFT JOIN C ON (A.A_id = C.A_id)
WHERE A.A_id = ?
GROUP BY A.A_id, A.col_2, col_3, B.col_2, A.col_4
ORDER BY CASE WHEN A.col_2 = ?
THEN 0
ELSE 1
END, col_3;
यह थोड़ा अक्षम लगता है, दोनों क्योंकि मैं GROUP BY
और भी में उन सभी क्षेत्रों क्योंकि मैं भरोसा कर रहा हूँ सूची जहां सभी मैं वास्तव में चाहते हैं है या नहीं है:
यहाँ मैं क्या है है कम से कम एक मैच या नहीं। क्या यह सुधार किया जा सकता है?
सिर्फ इसलिए कि आप स्तंभ नाम का एक बहुत टाइप करने के लिए एक प्रश्न अक्षम नहीं है था;) इस मामले में हालांकि, आप सही कर रहे हैं। गिनती को छंटनी और टैबलेट करना महंगा है, लेकिन शायद अधिक महंगा यह है कि डीबी को उस गिनती के लिए तालिका सी में सभी पंक्तियों से गुज़रना पड़ता है। EXISTS समाधान के साथ जैसे ही यह पहली मिलान पंक्ति पाता है, यह दिखना बंद कर सकता है। –
अच्छी व्याख्या, @ टॉम। –