如何包含MySQL COUNT为0的行?

Ber*_*ard 2 mysql count

我正在使用以下查询返回如下结果:

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
Run Code Online (Sandbox Code Playgroud)

但是我希望它返回计数为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
Run Code Online (Sandbox Code Playgroud)

我读到这可能是我的JOIN的一个问题,所以我尝试了很多不同的,我得到了相同的结果.有谁知道我做错了什么?

Mic*_*son 9

您的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
Run Code Online (Sandbox Code Playgroud)