- Bạn có thể
GROUP BY
trên id và tên người dùng. - Sử dụng
HAVING
mệnh đề vớiSUM()
tổng hợp để lọc ra các trường hợp. - Nếu người dùng không làm việc vào một ngày cụ thể,
SUM()
cho ngày đó sẽ là 0, các lượt tham gia bài đăng.
Đối với trường hợp đầu tiên (hoạt động chính xác tất cả các ngày làm việc trong tuần), Hãy thử:
SELECT u.id, u.name
FROM USERS AS u
JOIN WORKDAYS AS wd ON wd.user_id = u.id
JOIN DAYS AS d ON d.id = wd.day_id
GROUP BY u.id, u.name
HAVING SUM(d.name = 'monday')
AND SUM(d.name = 'tuesday')
AND SUM(d.name = 'wednesday')
AND SUM(d.name = 'thursday')
AND SUM(d.name = 'friday')
AND SUM(d.name = 'sunday') = 0
AND SUM(d.name = 'saturday') = 0
Đối với trường hợp thứ hai, chỉ cần loại bỏ các điều kiện vào sunday
và saturday
. Hãy thử:
SELECT u.id, u.name
FROM USERS AS u
JOIN WORKDAYS AS wd ON wd.user_id = u.id
JOIN DAYS AS d ON d.id = wd.day_id
GROUP BY u.id, u.name
HAVING SUM(d.name = 'monday')
AND SUM(d.name = 'tuesday')
AND SUM(d.name = 'wednesday')
AND SUM(d.name = 'thursday')
AND SUM(d.name = 'friday')