- Můžete
GROUP BY
na ID a jméno uživatele. - Použijte
HAVING
klauzule sSUM()
agregace k odfiltrování případů. - Pokud uživatel v určitý den nepracuje,
SUM()
pro tento den bude nula, příspěvek se připojí.
Pro první případ (funguje přesně všechny pracovní dny v týdnu), Zkuste:
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
V druhém případě stačí odstranit podmínky v sunday
a saturday
. Zkuste:
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')