web-dev-qa-db-ja.com

レコードが見つからない場合、Mysqlカウントはゼロを返します

私は2つのテーブルを持っています。

_cities - id_city, city_name
properties - id_property, id_city, property_name
_

_cities.city_name_を表示し、その横に[properties.count(id_city)]を表示したい

NULLの代わりにレコードが見つからない場合でもゼロを返すクエリを作成して、次のような結果を得るにはどうすればよいですか。

_London [123]
New York [0]
Berlin [11]
_

ここで、「ニューヨーク」は[0]であり、NULLではなく1ではありませんか?

14
David King

外部結合を使用します。

select cities.city_name, count(properties.id_city)
  from cities left join properties on cities.id_city = properties.id_city
  group by 1
21
ChssPly76

私はそれをテストしていませんが、以下はあなたのためにそれをするだろうと思います。秘訣は、1つのテーブルのプロパティ数を取得してから、そのテーブルを都市テーブルに左結合し、 [〜#〜] ifnull [〜#〜] 関数を使用してNULLを0に変換することです。

SELECT city_name, IFNULL(property_count, 0)
FROM cities
LEFT JOIN
   (SELECT id_city, count(*) as property_count
    FROM properties
    GROUP BY id_city) city_properties
   USING (id_city);
20
Shawn

クエリ:

SELECT cities.*, COUNT(properties.id_city) as num
FROM cities
LEFT JOIN properties on cities.id_city=properties.id_city
GROUP BY cities.id_city

mySQLでそのように機能するかどうかは100%確実ではありませんが、必要な場所に0カウントを返す必要があります。

1
Larry Lustig