Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como selecionar linhas que possuem certos relacionamentos por meio de uma tabela dinâmica?

  • Você pode GROUP BY no ID e no nome do usuário.
  • Use HAVING cláusula com SUM() agregação para filtrar casos.
  • Se um usuário não trabalhar em um determinado dia, SUM() para esse dia será zero, post joins.

Para o primeiro caso (funciona exatamente todos os dias úteis da semana), Tente:
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

Para o segundo caso, basta remover as condições em sunday e saturday . Tentar:
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')