sql >> Databáze >  >> RDS >> Mysql

Jak vybrat řádky, které mají určité vztahy prostřednictvím kontingenční tabulky?

  • Můžete GROUP BY na ID a jméno uživatele.
  • Použijte HAVING klauzule s SUM() agregace k odfiltrování případů.
  • Pokud uživatel v určitý den nepracuje, SUM() pro tento den bude nula, příspěvek se připojí.

Pro první případ (funguje přesně všechny pracovní dny v týdnu), Zkuste:

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

V druhém případě stačí odstranit podmínky v sunday a saturday . Zkuste:

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. Jak používat fond připojení s java, MySQL a Tomcat 6

  2. Limity kurzoru dotazu Salesforce API

  3. MySQL datetime výchozí čas s intervalem

  4. Django ManyToMany prostřednictvím více databází