我有3个示例表: 1.人
PID PNAME
----------- ------------------------------
111111111. James Brock
222222222. Dean Sampson
333333333. Adam Klein
444444444. Sam Toggle
公司
CID CNAME
工作
PID CNAME
我想展示每家公司的员工数量,包括没有员工的员工(即: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个表来匹配。
答案 0 :(得分:0)
从不在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;
请注意,JOIN
到PERSON
是不必要的。你只计算人,而不是查找他们的名字。