从一个表中选择数据,该表连接到另外两个表

时间:2014-06-01 11:43:13

标签: mysql

我有3张桌子:雇员,工作和部门

enter image description here

我想要达到的目标是从一个部门获得雇员人数。

我试了一下:

SELECT count(Emplyees.id) FROM Emplyees 
INNER JOIN Job ON (Job.id = Emplyees.job_id) 
INNER JOIN Department ON (Department.id = 2)

但它返回所有部门的雇员人数。 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用WHERE子句过滤掉department,where子句将应用于连接返回的整个结果集,而on子句中的条件将仅过滤来自连接表的结果

SELECT count(e.id) 
FROM Emplyees e
INNER JOIN Job j ON (j.id = e.job_id) 
INNER JOIN Department d ON (j.dept_id =d.id )
WHERE d.id = 2

并且还在计数中使用DISTINCT,因此,如果任何员工申请属于同一部门的多个工作将被计为1,即COUNT(DISTINCT e.id)

答案 1 :(得分:1)

EXISTS条款允许您限制某些事物的存在,而不必担心员工是否还有其他工作,这将使您的计数易于计算。

此外,由于部门唯一需要的是id,您可以将该表格保留下来,然后只按Job表格的dept_id字段进行过滤。

 SELECT count(id)
 FROM   Employees
 WHERE  EXISTS (
        SELECT      1
        FROM        Job
        WHERE       id = Employees.job_id
            AND     dept_id = 2

    )