2013-05-27 3 views
8

में बाएं से जुड़े कई रिश्तों की गिनती का चयन करें मेरे पास "शाखाएं", "ऑर्डर" और "उत्पादों" के लिए एक टेबल है। प्रत्येक ऑर्डर और उत्पाद शाखा_आईडी वाली शाखा से जुड़े हुए हैं। मुझे एक सूची प्राप्त करने के लिए एक एसक्यूएल स्टेटमेंट चाहिए कितने आदेश के लिए एक क्षेत्र के साथ सभी शाखाओं और कितने उत्पादों के लिए एक क्षेत्रएसक्यूएल

यह काम करता है:।

SELECT b.*, COUNT(o.id) AS orderCount FROM branches b LEFT JOIN orders o ON (o.branch_id = b.id) GROUP BY b.id

लेकिन अगर मैं इसे बदल यह केवल आदेश, नहीं उत्पादों की राशि हो जाता है। उत्पादों की मात्रा जोड़ने के लिए, रकम गलत है क्योंकि इसे ऑर्डर की मात्रा * उत्पादों की मात्रा मिल रही है।

मैं उसी SQL कथन में ऑर्डर और उत्पादों दोनों की राशि कैसे प्राप्त कर सकता हूं?

उत्तर

10

ऐसा कुछ काम करना चाहिए (कम से कम SQL सर्वर पर - आपने अपना इंजन निर्दिष्ट नहीं किया है)।

SELECT 
    b.id 
    ,COUNT(distinct o.id) AS orderCount 
    ,COUNT(distinct p.id) AS productCount 
FROM branches b 
LEFT JOIN orders o 
    ON (o.branch_id = b.id) 
left join products p 
    on p.product_id=b.id) 
GROUP BY 
    b.id 
5

प्रयास करें:

select 
    *, 
    (select COUNT(*) from Orders o where o.branch_id=b.id) OrderCount, 
    (select COUNT(*) from Products p where o.branch_id=p.id) ProductCount 
From 
    branches b 
+1

इस समाधान और अधिक लचीला है, क्योंकि आप एक ही समय में अपने सभी की स्थिति डाल विशिष्ट वस्तुओं की गिनती प्राप्त करने के लिए कर सकते हैं, धन्यवाद – CIRCLE

+0

सबक्वेरी इस तरह एक फिसलन ढलान है। आप अपना कोड बहुत जल्दी धीमा कर सकते हैं। – Dan