sql >> Database >  >> RDS >> Mysql

Hoe rijen selecteren die bepaalde relaties hebben via een draaitabel?

  • Je kunt GROUP BY op gebruikers-ID en naam.
  • Gebruik HAVING clausule met SUM() aggregatie om gevallen uit te filteren.
  • Als een gebruiker op een bepaalde dag niet werkt, SUM() voor die dag zal nul zijn, post joins.

Voor het eerste geval (werkt precies alle werkdagen van de week), Probeer:

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

Voor het tweede geval, verwijder gewoon de voorwaarden op sunday en saturday . Probeer:

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


  1. LISTAGG Query ORA-00937:geen groepsfunctie voor één groep

  2. SIN() Functie in Oracle

  3. SqlCommand hergebruiken?

  4. Mysql TIME converteren van 24 uur naar AM/PM-formaat