mysql 将两个SQL查询连接在一起,但使用第一个查询中的变量执行第二个查询

2eafrhcq  于 5个月前  发布在  Mysql
关注(0)|答案(2)|浏览(74)

我尝试在MySQL中执行SQL查询,然后右连接第二个查询的列。
然而,为了执行第二个查询,我需要一个来自第一个查询结果的变量(雇员编号)。
此示例显示了特定团队中的员工,但同时还广告了一列,显示该行中的员工未能上班的次数。
员工日志表只保存员工id号以及他们是否出现在轮班中。
employee.id_number是employee表的PK,employee_log表的FK

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与第一个查询返回的employee.id_number匹配.然后将此列连接到上面查询的右侧.right inner join?
也许是内部连接操作或子查询?

prdp8dxp

prdp8dxp1#

下面的查询应该有助于如果我得到它正确。

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"

字符串

hyrbngr7

hyrbngr72#

看起来你需要的是一个连接。有多种连接类型:

  • INNER JOIN(两个表都必须有数据)
  • LEFT JOIN(LEFT表中的所有记录和右侧匹配的记录)
  • RIGHT JOIN(右表中的所有记录和左表中匹配的记录)
  • FULL OUTER(两个表中的所有记录在匹配位置对齐)
  • 交叉连接(两个表中的所有记录彼此相关(一个表中有5条记录,另一个表中有10条记录,产生(5*10)50条记录)
  • OUTER APPLY(一个表值函数,它将返回外层中每个记录的子查询结果。例如,也许我想要每个员工的前10个最新日志条目,我们可以选择前10个并将其关联到企业ID;但这里不需要这个)
  • UNION,MINUS,EXCEPT,UNION ALL,INTERSECT...都是SET运算符,而不是技术上的连接。它们将数据集作为一个整体与其他数据集进行评估。UNION将两个数据集合并并消除重复,EXCEPT/MINUS从第一个数据集中删除第二个数据集中的数据,而intersect显示它们在两个数据集中的位置。UNION ALL将两者合并并保留重复。集合运算符似乎与您的问题无关。
    **假设 *
  • employee_log有一个名为id_number的字段,它是employee.id_number的外键
  • 如果alpha中的任何雇员在日志表中没有条目,我们使用合并。在这种情况下,我们希望显示0而不是NULL

备注:

  • 别名表,用于提高员工日志的员工可读性(E)(EL
  • 使用左连接(包括员工表中的所有记录,仅包括员工日志中匹配的记录。
  • 在联接本身的attendance_type上应用过滤器。如果我们把它放在where子句中,它会否定左联接,使其表现得像一个内部联接。
  • 左连接,右连接这是关于表的顺序。所以我们想显示所有阿尔法团队的员工和他们没有出现的次数。

工艺流程:

  • 系统检索“阿尔法”团队的所有员工
  • 系统获取与alpha员工相关的所有“未出现”日志文件
  • 系统通过ID、名字、姓氏对未出现分组的条目进行计数
  • 系统呈现输出

查询:

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

字符串

相关问题