Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да изберете редове, които имат определени връзки чрез централна таблица?

  • Можете GROUP BY на потребителски идентификатор и име.
  • Използвайте HAVING клауза с SUM() агрегиране за филтриране на случаи.
  • Ако потребител не работи в определен ден, SUM() за този ден ще бъде нула, публикувайте присъединява.

За първи случай (работиточно всички работни дни от седмицата), Опитайте:

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

За втория случай просто премахнете условията в sunday и saturday . Опитайте:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Работи с AMP (apache mysql php) на Android

  2. получаване на стойности, които не съществуват в таблицата на mysql

  3. MySQL INSERT INTO с PHP $променлива

  4. Как мога да избегна пълно сканиране на таблицата на тази mysql заявка?

  5. SQLSTATE[23000]:Нарушение на ограничението за целостта с валидно ограничение