- Sie können
GROUP BYauf Benutzer-ID und Name. - Verwenden Sie
HAVING-Klausel mitSUM()Aggregation zum Herausfiltern von Fällen. - Wenn ein Benutzer an einem bestimmten Tag nicht arbeitet,
SUM()für diesen Tag wird null sein, Post Joins.
Für den ersten Fall (funktioniert genau alle Werktage der Woche), Versuchen Sie:
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
Für den zweiten Fall entfernen Sie einfach die Bedingungen am sunday und saturday . Versuchen Sie:
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')