14

私は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ではありませんか?

4

4 に答える 4

23

私はそれをテストしていませんが、以下はあなたのためにそれをするだろうと思います。秘訣は、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);
于 2009-10-07T00:25:01.153 に答える
22

外部結合を使用します。

select cities.city_name, count(properties.id_city)
  from cities left join properties on cities.id_city = properties.id_city
  group by 1
于 2009-10-06T23:41:01.253 に答える
3

クエリ:

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カウントを返す必要があります。

于 2009-10-07T00:07:38.713 に答える
-4

単純。「(Count(*)+ 0)」を使用します。nullに0を加えたものは、数値を返します。

于 2017-02-09T18:03:05.170 に答える