2016-12-01 8 views
0

外部テーブルの出現回数を含むテーブルから結果を取得しようとしています。このテーブルは0以上の外観を持つことができます。次の例のようにLEFT JOINとGROUP BYを使用してNULLをMySQLに含める(*)COUNT(*)

表:カラー

+------+---------+ 
| id | name | 
+------+---------+ 
| 1 | red | 
| 2 | blue | 
| 3 | yellow | 
| 4 | green | 
+------+---------+ 

テーブル:フルーツ

+--------+----------+ 
| name | color_id | 
+--------+----------+ 
| apple | 1  | 
| banana | 3  | 
| grape | 4  | 
| lemon | 3  | 
+--------+----------+ 

だから私は戻って、果実のテーブル内のすべての色や発生を一覧表示する必要がありますこのようなもの:

1, red, 1 
2, blue, 0 
3, yellow, 2 
4, green, 1 

私はこのクエリをしようとしている:

SELECT `c`.`id`, `c`.`name`, COUNT(1) 
FROM color `c` 
LEFT JOIN fruit `f` 
ON `c`.`id` = `f`.`color_id` 
GROUP BY `c`.`id` 

このクエリではなく、の「青」のためにの数を返しています。

SELECT c.id, COUNT(f.name) 
FROM color c 
LEFT JOIN fruit f ON c.id = f.color_id 
GROUP BY c.id 

あなたはNULLがゼロになる、返すことができるように、果物のフィールドをカウントする必要があります:色「青」beacuseこの作品フルーツテーブルに

+1

カウントされません(1)常に返す1を数える置きますか? – Jerry

+1

さて、あなたは1の数を数えており、mysqlはそれを行います。 'count(1)'を 'count(f.name)'に置き換えると、果実の数がカウントされます。 – Solarflare

+0

@Jerryいいえ、 'COUNT(anything)'は、null以外の値の数をカウントします。 – Uueerdo

答えて

4

を表示されません。

1

あなたは(1)、変更カウント(f.color_id)

select 
    c.id 
    , c.name 
    , count(f.color_id) as [Color Count] 
from color as c 
    left join fruit as f 
    on c.id = f.color_id 
group by c.id, c.name 
関連する問題