我有4个表(工作人员,组,部门,办公室),并希望有一个SQL查询,将返回一个报告(报告)。SQL多个表,并显示,如果没有记录
Table: Workers
+------------+----------+--------------+
| workers_id | group_id | workers_name |
+------------+----------+--------------+
Table: Group
+------------+------------+---------+-----------+
| group_id | group_name | dept_id | office_id |
+------------+------------+---------+-----------+
Table: Department
+---------+----------+-----------+
| dept_id | dept_name| office_id |
+---------+----------+-----------+
Table: Office
+-----------+------------+
| office_id | office_name|
+-----------+------------+
我已成功地使用下面的SQL语句,这将使我的结果答:
SELECT department.dept_name, count (workers.workers_id) as headcount,
FROM workers, group, department
WHERE workers.workers_id = group.group_id
AND group.dept_id = department.dept_id
GROUP BY group.group_id
Result A:
+------------+----------+
| dept_name | headcount|
+------------+----------+
| dept A | 2 |
+------------+----------+
| dept B | 1 |
+------------+----------+
| dept D | 2 |
+------------+----------+
| dept F | 3 |
+------------+----------+
但是它不是上市部与0号工人(是有道理的,因为有任何的arent)。是否可以继续执行单个查询以获得以下结果?
Result:
+------------+----------+
| dept_name | headcount|
+------------+----------+
| dept A | 2 |
+------------+----------+
| dept B | 1 |
+------------+----------+
| dept C | 0 |
+------------+----------+
| dept D | 2 |
+------------+----------+
| dept E | 0 |
+------------+----------+
| dept F | 3 |
+------------+----------+
我已经尝试过isnull,左连接和联合没有任何运气,我的sql-fu是在基本级别。希望对此有帮助。干杯!
提示今天:切换到现代的,明确的' JOIN'语法 - 更容易编写(没有错误),更易于阅读,并且在需要时更容易转换为外连接。 – jarlh
这不是你的查询:-( – Strawberry
GROUP BY是无效的,会在新版本的MySQL上产生一个错误(除非在兼容模式下),并且在旧版本中返回不可预知的数据一般的GROUP BY规则说:指定GROUP BY子句时,SELECT列表中的每个列引用都必须标识分组列或者是设置函数的参数。“ – jarlh