我有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