我正在使用以下查询返回如下结果:
SELECT subnets.subnet_id , INET_NTOA( subnets.address ) AS inet_address, subnet_masks.hosts, COUNT(addresses.STATUS) AS status_count
FROM subnets
LEFT JOIN subnet_masks ON subnets.mask_id = subnet_masks.mask_id
LEFT JOIN addresses ON subnets.subnet_id = addresses.subnet_id
WHERE addresses.status = 'allocated'
GROUP BY subnet_id
ORDER BY subnets.address
subnet_id inet_address hosts status_count
91 10.10.10.0 65534 3
71 192.168.1.0 254 6
90 192.168.10.0 254 1
但是我希望它也返回计数为 0 的行,就像这样:
subnet_id inet_address hosts status_count
91 10.10.10.0 65534 3
76 172.128.0.0 254 0
71 192.168.1.0 254 6
90 192.168.10.0 254 1
我读到这可能是我的 JOIN 有问题,所以我尝试了很多不同的方法,但得到了相同的结果。有谁知道我做错了什么?
最佳答案
您的 WHERE
子句正在过滤记录...将其移至您的 LEFT JOIN
以解决问题:
SELECT subnets.subnet_id , INET_NTOA( subnets.address ) AS inet_address, subnet_masks.hosts, COUNT(addresses.STATUS) AS status_count
FROM subnets
LEFT JOIN subnet_masks ON subnets.mask_id = subnet_masks.mask_id
LEFT JOIN addresses ON subnets.subnet_id = addresses.subnet_id AND addresses.status = 'allocated'
GROUP BY subnet_id
ORDER BY subnets.address
关于mysql - 如何包含 MySQL COUNT 为 0 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838433/