Mysql
 sql >> Database >  >> RDS >> Mysql

Come selezionare le righe che hanno determinate relazioni tramite una tabella pivot?

  • Puoi GROUP BY su ID utente e nome.
  • Usa HAVING clausola con SUM() aggregazione per filtrare i casi.
  • Se un utente non lavora in un determinato giorno, SUM() per quel giorno sarà zero, post join.

Per il primo caso (funziona esattamente tutti i giorni lavorativi della settimana), Prova:

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

Per il secondo caso, rimuovi le condizioni di sunday e saturday . Prova:

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')