我想加入以下两个查询。但是第二个查询的条件不应该影响第一个查询的结果。我可以这样做吗?
查询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
在查询2的指定栏中,12,13,14等于Cutting Incharge,patern maker,Supervisor。
我想加入这两个表
答案 0 :(得分:2)
你可以尝试
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
答案 1 :(得分:1)
据我所知,第一个auery列出了名称和指定计数。 第二个查询是计算每个指定的所有出勤率。
如果您想JOIN
这两个查询,那么您的链接就是designation
。
我使用了SUM& COALSESCE,因为最终结果集将再次按指定分组 - 所以我必须使用聚合函数超过当前计数。 COALESCE将返回0而不是NULLS。以防结果集之间没有匹配。
这就是你要找的地方吗?如果没有,只需添加评论。
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
答案 2 :(得分:0)
如果要消除任何重复的记录,可以使用UNION。如果重复项不重要,请尝试UNION ALL,这将帮助您解决问题。
在以下位置阅读有关这些命令: https://dev.mysql.com/doc/refman/5.7/en/union.html