2009-10-06 28 views
12

Tôi có hai bảng.Số đếm Mysql trả về 0 nếu không có bản ghi nào được tìm thấy

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

Tôi muốn hiển thị cities.city_name và bên cạnh nó [properties.count(id_city)]

Làm thế nào để thực hiện một truy vấn mà vẫn trả về zero nếu không có hồ sơ được tìm thấy thay vì NULL, vì vậy mà tôi có được kết quả như thế này:

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

nơi "New York" là [0], không phải NULL chứ không phải 1?

+0

Câu hỏi của bạn không rõ ràng .... –

+0

Truy vấn hiện tại của bạn là gì? – recursive

+0

Tôi đã cố hết sức để làm sạch nó một chút để nó rõ ràng hơn. –

Trả lời

17

Sử dụng một bên ngoài tham gia:

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

chọn cities.city_name, số (*) từ các thành phố còn lại tham gia các thuộc tính trên cities.id_city = properties.id_city nhóm theo 1 – Preston

+0

sai rồi! nó sẽ trả về kết quả bằng "1" ngay cả khi không có kết quả nào phù hợp với số –

+0

thử tính (properties.id_property) thay vì đếm (*) – timdev

1

Truy vấn:

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 

phải trả lại một số 0, nơi bạn muốn nó, mặc dù tôi không phải là 100% nhất định nó hoạt động như vậy trong MySQL .

13

Tôi nghĩ rằng sau đây sẽ làm điều đó cho bạn, mặc dù tôi đã không thử nghiệm nó. Bí quyết là lấy số lượng thuộc tính trong một bảng, và sau đó sang trái nối bảng đó với bảng thành phố, chuyển đổi NULL thành 0 bằng hàm IFNULL.

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

Đơn giản. Sử dụng "(Đếm (*) + 0)". Bất kỳ null cộng 0 sẽ trả về một số.

+0

Nhưng nó không trả về 0 nếu không có mục nhập nào được tạo trong danh sách. – Ben

Các vấn đề liên quan