我有 3 个示例表:1. 人
PID PNAME
----------- ------------------------------
111111111. James Brock
222222222. Dean Sampson
333333333. Adam Klein
444444444. Sam Toggle
公司
国际舞蹈委员会别名记录
- A公司
- B公司
- C公司
- D公司
加工
PID 别名记录
- B公司
- A公司
- A公司
- C公司
我想显示每个公司的员工#,包括那些没有任何员工的员工(即:0人(
所以我到目前为止有这个:
SELECT CNAME, COUNT(*) as EMPLOYEES
FROM PERSON P, WORKING W, COMPANY C
WHERE P.PID = W.PID
AND W.CNAME = C.CNAME
GROUP BY CNAME;
其中返回:
CNAME EMPLOYEES
----------- ------------------------------
Company A 2
Company B 1
Company C 1
请注意,缺少公司 D
我想要这个:
CNAME EMPLOYEES
----------- ------------------------------
Company A 2
Company B 1
Company C 1
Company D 0
有没有一种方法可以得到我想要的结果?我在网上找到的所有其他示例仅使用 2 个表格进行匹配。
切勿在FROM
子句中使用逗号。 始终使用正确、显式JOIN
语法。 然后,LEFT JOIN
就很明显了。
SELECT C.CNAME, COUNT(W.PID) as EMPLOYEES
FROM COMPANY C LEFT JOIN
WORKING W
ON W.CNAME = C.CNAME
GROUP BY C.CNAME;
请注意,PERSON
JOIN
是不必要的。 你只是在数人,而不是查他们的名字。