- Du kan
GROUP BY
på bruger-id og navn. - Brug
HAVING
klausul medSUM()
aggregering for at bortfiltrere sager. - Hvis en bruger ikke arbejder på en bestemt dag,
SUM()
for den dag vil være nul, post joins.
For det første tilfælde (virker præcis alle ugens arbejdsdage), Prøv:
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
For det andet tilfælde skal du blot fjerne betingelserne på sunday
og saturday
. Prøv:
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')