0

私のデータベースには、フリートと person_onboard_fleets という 2 つのテーブルがあります。私はすべてのフリートのリストを取得しようとしています (これは機能します)。そして、各フリートに何人の人員が乗っているかを数えようとしています (これは機能しません)。ただし、人員が乗船していない場合、結果は表示されません。

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 つの結果を期待しています。ただし、結果は1つしか得られません。私は以下を使用しようとしました

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

内部結合は、演算子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 に答える
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 に答える