这是表格的详细信息:
员工:
emp_ID | Primary Key
emp_name | Varchar
emp_email | varchar <br>
emp_dept_id | Foreign Key
部门:
dept_ID | Primary Key
dept_name | Varchar
emp_id | Foreign Key
经理详细信息已经在employee
表中。
我正在使用Oracle Database
。
员工:
emp_ID emp_name emp_email emp_dept_id
1 Cyrus abc@xyz.com 10
2 Andrew xyz@abc.com 20
3 Mark xyz@abc.com 10
4 Tony xyz@abc.com 10
5 Elvis xyz@abc.com 20
6 Rock xyz@abc.com 10
7 George xyz@abc.com 20
8 Mary xyz@abc.com 10
9 Thomas xyz@abc.com 20
10 Martin xyz@abc.com 10
部门:
dept_id dept_name emp_id
10 Accounts 4
20 Development 9
这些是表中的数据。在“部门”表中,emp_id(外键)指示部门的负责人/经理。
答案 0 :(得分:0)
这非常简单。您要获取部门详细信息(1),并包括与该部门关联的员工(2)。
SELECT <dept_col1>, <dept_col2>, ...
FROM Department
SELECT dept_ID, <aggregation> AS MyAgg
FROM department
GROUP BY dept_ID
在这里,您用要查找的内容替换<aggregation>
。您的情况应该是COUNT(*)
。
LEFT JOIN
以将它们连接到PK / FK关系: SELECT
dept.<col1>, dept.<col2>, ...,
COALESCE(emp.MyAgg,0) AS MyAgg
FROM Department dept
LEFT JOIN (
SELECT dept_ID, <aggregation> AS MyAgg
FROM department
GROUP BY dept_ID
) emp ON dept.<FK> = emp.<PK>
LEFT JOIN
获取部门经理的信息: SELECT
dept.<col1>, dept.<col2>, ...,
mgr.<col1>,
COALESCE(emp.MyAgg,0) AS MyAgg -- In case there are 0 employees
FROM Department dept
LEFT JOIN employee mgr ON dept.<FK> = mgr.<PK>
LEFT JOIN (
SELECT dept_ID, <aggregation> AS MyAgg
FROM department
GROUP BY dept_ID
) emp ON dept.<FK> = emp.<PK>
尝试一下,看看能走多远。如果您遇到困难,请告诉我。
答案 1 :(得分:0)
您可以尝试以下查询:
nvarchar
干杯!