sql >> Databasteknik >  >> RDS >> Mysql

Hur väljer man rader som har vissa relationer genom en pivottabell?

  • Du kan GROUP BY på användar-id och namn.
  • Använd HAVING sats med SUM() aggregering för att filtrera bort ärenden.
  • Om en användare inte arbetar en viss dag, SUM() för den dagen kommer att vara noll, post ansluter.

För första fallet (fungerar exakt alla arbetsdagar i veckan), 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

För det andra fallet, ta bara bort villkoren på sunday och saturday . Försök:

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. Hur man skapar en användare med PSQL

  2. #1273 - Okänd sammanställning:'utf8mb4_unicode_ci' cPanel

  3. Hur läser man en fil och lägger till dess innehåll i databasen?

  4. uppdatera rad automatiskt efter en viss tid