2012-07-02 17 views
6

के साथ एसक्यूएल COUNT मेरे पास एसक्यूएल के साथ एक साधारण सरल सवाल है कि मुझे पता लगाने में परेशानी हो रही है। मान लें कि मेरे पास निम्नलिखित सारणी हैं:WHERE क्लॉज

company: 
    company_id 
    company_title 

users: 
    user_id 
    username 

company_owners: 
    company_id 
    user_id 

अब, कंपनी के मालिकों के रूप में कई उपयोगकर्ता हो सकते हैं।

company: 
1, "A Company" 
2, "B Company" 
3, "C Company" 

users: 
1, "A User" 
2, "B User" 
3, "C User" 

company_owners: 
1,1 
1,2 
1,3 
2,3 

मैं एक प्रश्न (MySQL) कि COMPANY_TITLE है, साथ ही यह है कि कंपनी के लिए मालिकों की संख्या हो जाता है, एक विशिष्ट कंपनी के मालिक के आधार पर बनाने के लिए कोशिश कर रहा हूँ: यहां कुछ उदाहरण डेटा है। तो, उदाहरण के लिए:

उदाहरण क्वेरी (अंग्रेजी में) चलाएँ: प्रत्येक कंपनी के लिए मालिकों की संख्या जाओ कि 'सी उपयोगकर्ता "के लिए एक मालिक है:

company_id=1, company_title="A Company", num_owners=3 
company_id=2, company_title="B Company", num_owners=1 
company_id=3, company_title="C Company", num_owners=0 

मैं कोशिश की है:

SELECT COUNT(user_id), company.* FROM `company` 
LEFT JOIN `company_owners` ON company_owners.company_id = company.company_id 
WHERE company_owners.user_id=1 GROUP BY company_id 

लेकिन यह हमेशा मुझे "1" का स्वामित्व संख्या देता है, मुझे लगता है क्योंकि यह केवल पंक्तियों को COUNT करता है जहां user_id = 1।

क्या किसी के पास कोई विचार है? यदि आवश्यकता हो तो मैं अधिक जानकारी प्रदान कर सकता हूं।

बहुत बहुत धन्यवाद!

+0

क्या 'course_id' है? –

+0

क्षमा करें, यह एक गलत टाइप – Chris

उत्तर

7

आपका WHERE क्लॉज "जहां इस कंपनी के लिए user_id = 1 के साथ कोई मालिक मौजूद है" होना चाहिए।

SELECT COUNT(user_id), company.* 
FROM `company` 
LEFT JOIN `company_owners` 
ON company_owners.company_id = company.company_id 
WHERE EXISTS 
(
    SELECT * 
    FROM company_owners AS co2 
    WHERE company_owners.company_id = co2.company_id 
    AND co2.user_id = 3 
) 
GROUP BY company_id 

ऑनलाइन काम कर यह देखें: sqlfiddle

+0

था जो बहुत अच्छा काम करता है। मैं इसे कैसे बदलूं ताकि मैं उन सभी कंपनियों को भी प्राप्त कर सकूं जिनके पास 0 मालिक हैं? यह केवल 0 से अधिक मालिकों के साथ पंक्तियों को लौटाता है। – Chris

+0

@ क्रिस: यह किसी मालिक के साथ कंपनियों को वापस नहीं करता है क्योंकि किसी भी मालिक के साथ कोई कंपनी "सी" के स्वामित्व में नहीं हो सकती है। –

+0

यह एक अविश्वसनीय रूप से अच्छा मुद्दा है और मैं कुछ अलग सोच रहा था! हाहा माफ़ करना। त्वरित उत्तर के लिए बहुत बहुत धन्यवाद! – Chris

1
select company.company_id, company_title, count(*) 
from company join company_owners on company.company_id = company_owners.company_id 
where exists (select 1 from company_owners co where co.user_id = 1 and co.company_id = company.company_id) 
group by company.company_id, company_title 
संबंधित मुद्दे