我正在尝试在 MySQL 中执行 SQL 查询,然后“右”连接第二个查询的列。
但是,为了执行第二个查询,我需要第一个查询结果中的变量(员工编号)。
此示例显示特定团队中的员工,同时还广告一列,显示该行中的员工未能上班的次数。
员工日志表仅保存员工 ID 号以及他们是否到岗。
SELECT employee.id_number, employee.name, employee.surname
FROM employee
WHERE employee.team_name = "alpha";
Select count(employee_log.attendance_type)
FROM employee_log
WHERE employee_log.attendance_type = "No-Show"; AND (match with the returned employee.id_number from the 1st query....then join this column onto the right of the query above....right inner join I suppose?)
我不确定发布此内容时我在寻找什么,我假设可能是内部联接操作或子查询?这是我必须尝试和开发的第一个复杂查询。
如果有人可以帮助我,我将非常感激。
谢谢
如果我正确的话,下面的查询应该会有所帮助。
Select count(employee_log.attendance_type)
FROM employee_log log
JOIN (
SELECT employee.id_number, employee.name, employee.surname
FROM employee
WHERE employee.team_name = "alpha";
) emp ON emp.id_number = log.id_number
WHERE employee_log.attendance_type = "No-Show"
您所追求的是加入。有多种连接类型:
假设
备注:
别名表可提高员工日志的可读性 (E) (EL)
使用了LEFT连接(包括员工表中的所有记录,并且仅包含员工日志中匹配的记录。
在加入本身的 attend_type 上应用了过滤器。如果我们将其放在 where 子句中,它将否定左连接,使其表现得像内连接。
左连接,右连接它是关于表的顺序。因此,我们想要显示所有 alpha 团队员工以及他们未出现的次数。
流程:
查询:
SELECT E.id_number, E.name, E.surname, coalesce(count(EL.attendance_type),0) as NoShows
FROM employee E
LEFT JOIN employee_log EL
on E.id_number = EL.id_number
AND EL.attendance_type = 'No-Show'
WHERE E.team_name = 'alpha'
GROUP BY E.id_number, E.name, E.surname