1

我有 4 张桌子:

country

  • ID
  • 姓名

region

  • ID
  • 姓名
  • fk_country

dept

  • ID
  • 姓名
  • fk_region

user

  • ID
  • fk_country
  • fk_region
  • fk_dept

user表只有一个外键集(其他应为空)。

我们不必设置外键,因为我们可以通过(when is set)fk_pays触摸country表格fk_dept.fk_region.fk_countryfk_dept

或者

通过fk_region.fk_country(何时fk_region设置)

这种行为是为了避免冗余。

我的问题是:

如何使用包含该国家/地区的用户数(COUNT)的添加列来获取所有国家/地区信息?

我知道如何为每次付款使用不同的请求(使用COALESCE),但我希望一次性完成。

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 回答