1

私は4つのテーブルを持っています:

country:

  • ID
  • 名前

region:

  • ID
  • 名前
  • fk_country

dept:

  • ID
  • 名前
  • fk_region

user:

  • ID
  • fk_country
  • fk_region
  • fk_dept

テーブルには 1 つのuser外部キー セットしかありません (他は null にする必要があります)。

(が設定されている場合)を介してテーブルにfk_pays触れることができるため、外部キーを設定する必要はありませんcountryfk_dept.fk_region.fk_countryfk_dept

また

via fk_region.fk_countryfk_region設定時)

この動作は、冗長性を避けるために行われました。

私の質問は:

その国のユーザー数 ( ) を含む列を追加して、すべての国情報を取得する方法はCOUNT?

支払いごとに異なるリクエストを使用する方法を知っていますが(を使用COALESCE)、1回でそれを行いたいです。

4

2 に答える 2

0

これを試してください:

SELECT count(user.id), country.name, region.name, dept.name FROM user
   JOIN country ON user.fk_country = country.id
   JOIN region ON region.fk_country = country.id
   JOIN dept ON dept.fk_region = region.id
       GROUP BY country.id
于 2013-03-06T12:42:40.787 に答える
0

結合で OR を使用するだけです

SELECT c.id, c.name, count(DISTINCT u.id)
FROM country AS c
JOIN region AS r ON c.id=r.fk_country
JOIN dept AS d ON r.id=d.fk_region
JOIN users AS u ON u.fk_country=c.id OR u.fk_region=r.id OR u.fk_dept=d.id
GROUP BY c.id,c.name;

http://sqlfiddle.com/#!1/3026f/1

于 2013-03-06T12:47:10.227 に答える