繁体   English   中英

如何联接两个SELECT语句?

[英]How to join two SELECT statements?

我想加入以下两个查询。 但是第二个查询的条件不应该影响第一个查询的结果。我该怎么做?

查询1

SELECT ed.name, COUNT(ej.designation) AS actual
FROM emp_designations ed 
JOIN emp_job_details ej on ed.id = ej.designation 
WHERE ed.department = 4 
GROUP BY ej.designation,ed.name

查询2

SELECT ej.designation, COUNT(*) as present 
FROM daily_attendances da 
JOIN emp_job_details ej ON da.emp_id = ej.emp_id
WHERE da.in_time != '' AND da.date = '2017-06-02' 
GROUP BY ej.designation

查询结果1 在此处输入图片说明

查询结果2 在此处输入图片说明

在查询2的“指定”列中,12、13、14等于“切割负责人”,“图案制作者”,“主管”。

我想加入这两个表

你可以试试

SELECT ej.designation, ed.name, COUNT(ej.designation) AS actual, COUNT(da.emp_id) as present
FROM emp_designations ed 
JOIN emp_job_details ej on ed.id = ej.designation 
LEFT JOIN daily_attendances da 
    ON (da.emp_id = ej.emp_id AND da.in_time != '' AND da.date = '2017-06-02')
WHERE ed.department = 4 
GROUP BY ej.designation ,ed.name

据我了解,第一个aury列出了名称和名称。 第二个查询是计算每个指定的所有出席人数。

如果您想JOIN这两个查询,则链接designation 我使用了SUM&COALSESCE,因为最终结果集将再次按该名称分组-因此,我必须在当前数量上使用聚合函数。 COALESCE将返回0而不是NULL。 以防万一结果集之间不匹配。

这是您要寻找的东西吗? 如果没有,请添加评论。

    SELECT ed.name
          ,COUNT(ej.designation) AS actual
          ,SUM(COALESCE(pres.present,0)) AS present
      FROM emp_designations ed 
INNER JOIN emp_job_details ej 
        ON ed.id = ej.designation 
LEFT OUTER JOIN 
        (
          SELECT ej.designation
               ,COUNT(*) as present 
            FROM daily_attendances da 
      INNER JOIN emp_job_details ej 
              ON da.emp_id = ej.emp_id
           WHERE da.in_time != '' 
             AND da.date = '2017-06-02' 
        GROUP BY ej.designation
        ) pres
       ON pres.designation = ej.designation     
     WHERE ed.department = 4 
  GROUP BY ej.designation
          ,ed.name

如果要消除呈现的任何重复记录,可以使用UNION。 如果重复没有关系,请尝试使用UNION ALL,这将对您有所帮助。

在以下位置阅读有关这些命令的信息: https : //dev.mysql.com/doc/refman/5.7/en/union.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM