2009-10-06 13 views
12

मेरे पास दो टेबल हैं।माइस्क्ल गिनती वापस शून्य अगर कोई रिकॉर्ड नहीं मिला

cities - id_city, city_name 
properties - id_property, id_city, property_name 

मैं cities.city_name प्रदर्शित करना चाहते हैं और उसके आगे मैं एक प्रश्न है कि अभी भी शून्य लौटाता है यदि कोई रिकॉर्ड NULL के बजाय पाए जाते हैं [properties.count(id_city)]

कैसे कर सकता हूँ, ताकि मैं इस तरह के परिणाम प्राप्त:

London [123] 
New York [0] 
Berlin [11] 

जहां "न्यूयॉर्क" [0] है, NULL नहीं और 1 नहीं?

+0

आपका प्रश्न स्पष्ट नहीं है .... –

+0

आपकी वर्तमान क्वेरी क्या है? – recursive

+0

मैंने इसे थोड़ा साफ करने के लिए अपनी पूरी कोशिश की ताकि यह स्पष्ट हो। –

उत्तर

17

उपयोग एक बाहरी में शामिल होने:

select cities.city_name, count(properties.id_city) 
    from cities left join properties on cities.id_city = properties.id_city 
    group by 1 
+0

शहरों का चयन करें city_name, शहरों से संपत्तियों में शामिल होने के बाद शहरों से गिनती (*) शहरों में संपत्तियों में शामिल हो गए हैं। Vid = property.id_city समूह – Preston

+0

द्वारा गलत है! यह "1" के साथ परिणाम देता है भले ही कोई मिलान नहीं है –

+0

गिनती (*) – timdev

1

क्वेरी:

SELECT cities.*, COUNT(properties.id_city) as num 
FROM cities 
LEFT JOIN properties on cities.id_city=properties.id_city 
GROUP BY cities.id_city 

एक 0 गिनती आप जहां चाहें लौटना चाहिए, हालांकि मैं नहीं कर रहा हूँ 100% निश्चित यह MySQL में उस तरह से काम करता है ।

13

मुझे लगता है कि निम्नलिखित आपके लिए यह करेगा, हालांकि मैंने इसका परीक्षण नहीं किया है। यह चाल एक टेबल में संपत्ति की गणना करने के लिए है, और उसके बाद उस तालिका में शहरों की मेज पर शामिल होने के लिए, IFNULL फ़ंक्शन का उपयोग करके NULLs को 0s में परिवर्तित करना है।

SELECT city_name, IFNULL(property_count, 0) 
FROM cities 
LEFT JOIN 
    (SELECT id_city, count(*) as property_count 
    FROM properties 
    GROUP BY id_city) city_properties 
    USING (id_city); 
-2

सरल। प्रयोग करें "(गणना (*) + 0)"। कोई भी शून्य प्लस 0 एक नंबर वापस करेगा।

+0

लेकिन अगर सूची में कोई प्रविष्टि नहीं बनाई गई है तो यह 0 नहीं लौटाता है। – Ben

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