我正在尝试编写一个mysql查询,该查询将列出所有员工,他们的工作职能以及他们在特定日期所做的所有工作的总成本。这是我的表格的相关部分:
job_function table
emp_func
emp_num
employee table
emp_name
emp_num
job table
job_date
emp_num
job_name
job_type table
cost
job_name
查询有效,只是它只返回那个特定日期有工作的员工。如果一名员工当天没有工作,他们就不会出现。我需要展示所有员工,即使那些那天没有工作的员工。有关如何做到这一点的任何建议?这是我的疑问:
SELECT
employee.emp_name,
job_function,emp_func,
SUM(job_type.cost)
FROM
employee
INNER JOIN job ON job.emp_num = employee.emp_num
INNER JOIN job_function ON job_function.emp_num = employee.emp_num
INNER JOIN job_type ON job.job_name = job_type.job_name
where job_date = '2016-04-16'
group by emp_name;
答案 0 :(得分:0)
如果您放置job_date = '2016-04-16'
,您只能看到当天工作的员工,则应删除WHERE以查看所有员工或设置job_date>'2016-04-16' AND job_date<'2016-05-31'
答案 1 :(得分:0)
即使左连接表中没有符合left join
条件的行,您也需要on
才能获得结果;在这种情况下,左连接表的列中的值将返回为null
。
您还需要将where
- 条件移至on
条件;否则,您的where
会要求job
- 表中的日期为2016-04-16
,因此必须存在(而不是null
),这会使left join
1}}再次表现得像join
。
SELECT
employee.emp_name,
job_function.emp_func,
SUM(job_type.cost)
FROM employee
JOIN job_function ON job_function.emp_num = employee.emp_num
left JOIN job ON job.emp_num = employee.emp_num and job.job_date = '2016-04-16'
left JOIN job_type ON job.job_name = job_type.job_name
group by employee.emp_name, job_function.emp_func;
我还修复了您的group by
并在那里添加了emp_func
- 列,因为您选择了该列。否则,这将导致MySQL 5.7+中的默认设置出错,否则在员工有多个功能的情况下可能会给您错误的结果。