0

我的数据库中有 2 个表,fleets 和personal_onboard_fleets。我正在尝试获取所有舰队的列表(有效)并计算每个舰队上有多少人员(无效)。但是,如果船上没有任何人员,则不会显示结果。

SELECT f.*, count(pof.ID) AS onboard 
FROM fleets f, personnel_onboard_fleets pof 
WHERE f.fleet_ID = pof.fleet_ID ORDER BY f.status

我期待 2 个结果,一个有 2 人的机队,一个有 0 人的机队。但是我只得到一个结果。我尝试使用以下

SELECT f.*,  IFNULL(COUNT(pof.ID), 0) AS onboard 
FROM fleets f, personnel_onboard_fleets pof 
WHERE f.fleet_ID = pof.fleet_ID ORDER BY f.status

我真的看不出查询有什么问题,是否需要添加其他任何内容来显示船上有 0 人的车队。

我在计数之前的原始查询显示所有舰队都很好,所以我知道这与计数有关。

这真让我抓狂!任何帮助将非常感激!!

4

3 回答 3

2

尝试:

SELECT f.fleet_id,
       Count(pof.id) AS onboard
FROM   fleets f
       LEFT JOIN personnel_onboard_fleets pof
              ON f.fleet_id = pof.fleet_id
GROUP  BY f.fleet_id
ORDER  BY f.status;  
于 2013-04-25T09:31:07.893 回答
0

COUNT()是一个聚合函数,它返回总行数。如果您指定字段名称(如您所做的那样),NULL则返回非值的数量。

您需要使用 GROUP BY。这会基于字段聚合行。然后,COUNT()返回每个组的总数。

SELECT f.fleet_ID, count(pof.ID) AS onboard
    FROM fleets f LEFT JOIN personnel_onboard_fleets pof
    ON f.fleet_ID = pof.fleet_ID
    GROUP BY f.fleet_ID
    ORDER BY f.status;
于 2013-04-25T09:32:19.237 回答
0

pof您的内部联接将消除不满足操作员的任何行=

您需要左连接,例如:

SELECT f.*, COUNT(pof.fleet_ID) AS onboard 
FROM fleets f
LEFT JOIN personnel_onboard_fleets pof ON f.fleet_ID = pof.fleet_ID
GROUP BY f.fleet_ID ORDER BY f.status
于 2013-04-25T09:36:39.360 回答