【发布时间】:2017-10-23 20:23:44
【问题描述】:
这里有 3 个表格:
城市(id PK、姓名、邮政编码)
职位(id PK,职位)
人员(id PK、first_name、last_name、job_id FK 工作、city_id FK 城市)
每个人都有工作并生活在一个城市,城市和工作都可以至少有 0 人 (0..n)。
我想计算每个工作和城市的人数,而不删除没有人的城市和工作:
> +----------+----------+---------------+
| city_id | job_id | count(p.id) |
+------------+----------+---------------+
| 140 | 1 | 0 |
| 249 | 37 | 1 |
| 249 | 40 | 1 |
| 249 | 269 | 1 |
| 250 | 4823 | 3 |
| 251 | 1 | 4 |
| 251 | 205 | 1 |
| 433 | 1 | 0 |
| 433 | 40 | 1 |
| 433 | 23 | 1 |
| 433 | 1346 | 1 |
| 434 | 5 | 5 |
| 434 | 70 | 1 |
| 434 | 5332 | 1 |
我猜查询应该是这样的:
SELECT job_id, city_id, COUNT(p.id)
FROM persons p
???? JOIN jobs j ON p.job_id=j.id
???? JOIN cities c ON p.city_id=c.id
GROUP BY j.id, c.id
我知道使用 INNER JOIN 无法做到这一点,因为所有不包含连接引用的行都将被忽略。
我尝试了 RIGHT JOIN 但根据 JOIN 的顺序结果不一样。
【问题讨论】:
-
添加一些示例表数据和预期结果 - 作为格式化文本,而不是图像。
-
替换你的????与左外
-
@jarlh : 我刚刚编辑了我的问题
-
预期结果很好,但我们还需要知道用于获得该结果的表数据。
-
出于隐私原因,我不能拥有这个(我的问题使用了模拟模式)。