使用左联接获取记录

时间:2019-05-14 07:42:16

标签: mysql

我希望获得用户表的所有记录,但是查询只返回两个表中匹配的记录。我正在显示当月出勤表中是否存在用户出勤的当月用户出勤率。

SELECT MAX(a1.attendance_id) atid,
a1.attendance_user_id, 
CONCAT(u1.user_firstname, ' ', u1.user_lastname) user_name, 
YEAR(attendance_date) at_year, 
MONTH(attendance_date) at_month, 
GROUP_CONCAT(DAY(attendance_date ) ORDER BY attendance_date) at_date, 
GROUP_CONCAT(attendance_type ORDER BY attendance_date) at_type 
FROM user u1 LEFT JOIN attendance a1 ON u1.user_id = a1.attendance_user_id 
WHERE u1.user_status = 'Active' AND DATE(a1.attendance_date) 
BETWEEN DATE_FORMAT(NOW() ,'%Y-%m-01') AND CURDATE() 
GROUP BY a1.attendance_user_id, YEAR(attendance_date), MONTH(attendance_date) ORDER BY atid DESC limit 0, 25

1 个答案:

答案 0 :(得分:0)

您需要在DATE(a1.attendance_date) BETWEEN DATE_FORMAT(NOW() ,'%Y-%m-01') AND CURDATE()中加入ON Clause条件

SELECT 
    MAX(a1.attendance_id) atid,
    a1.attendance_user_id, 
    CONCAT(u1.user_firstname, ' ', u1.user_lastname) user_name, 
    YEAR(attendance_date) at_year, 
    MONTH(attendance_date) at_month, 
    GROUP_CONCAT(DAY(attendance_date ) ORDER BY attendance_date) at_date, 
    GROUP_CONCAT(attendance_type ORDER BY attendance_date) at_type 
FROM user u1 LEFT JOIN attendance a1 ON u1.user_id = a1.attendance_user_id 
AND DATE(a1.attendance_date) BETWEEN DATE_FORMAT(NOW() ,'%Y-%m-01') AND CURDATE() 
WHERE u1.user_status = 'Active' 
GROUP BY a1.attendance_user_id, YEAR(attendance_date), MONTH(attendance_date) 
ORDER BY atid DESC limit 0, 25