Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie wähle ich Zeilen aus, die bestimmte Beziehungen über eine Pivot-Tabelle haben?

  • Sie können GROUP BY auf Benutzer-ID und Name.
  • Verwenden Sie HAVING -Klausel mit SUM() Aggregation zum Herausfiltern von Fällen.
  • Wenn ein Benutzer an einem bestimmten Tag nicht arbeitet, SUM() für diesen Tag wird null sein, Post Joins.

Für den ersten Fall (funktioniert genau alle Werktage der Woche), Versuchen Sie:

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 den zweiten Fall entfernen Sie einfach die Bedingungen am sunday und saturday . Versuchen Sie:

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