外部テーブルの出現回数を含むテーブルから結果を取得しようとしています。このテーブルは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を数える置きますか? – Jerry
さて、あなたは1の数を数えており、mysqlはそれを行います。 'count(1)'を 'count(f.name)'に置き換えると、果実の数がカウントされます。 – Solarflare
@Jerryいいえ、 'COUNT(anything)'は、null以外の値の数をカウントします。 – Uueerdo