- Sie können
GROUP BY
auf 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')