Как я могу указать предложение where при объединении нескольких таблиц? - PullRequest
0 голосов
/ 15 января 2019

У меня есть запрос, который должен подсчитать все мои указанные строки.Это мой запрос:

SELECT COUNT(*) AS Som
     FROM users
     RIGHT JOIN stoftesten ON users.username = stoftesten.gebruikersid
     RIGHT JOIN eindgesprekken ON users.username = eindgesprekken.gebruikersid
     RIGHT JOIN rapportages ON users.username = rapportages.gebruikersid
     WHERE users.rol = 'geleider' and users.basis = '1' and stoftesten.status = 'Niet beoordeeld' or eindgesprekken.status = 'Niet beoordeeld' or rapportages.status = 'Niet beoordeeld';

Я должен получить число 2, потому что это количество записей, которое у меня есть в соответствии с запросом, который я хочу, но это дает мне 40. Что я здесь не так делаю?

Таблицы:

пользователи

-------------------------------------------
| username (PK) | basis | rol      | name |
-------------------------------------------
| user01        | VLB   | geleider | Ben  |
| user02        | GER   | geleider | Tom  |
-------------------------------------------

stoftesten

-------------------------------------------
| id (PK) | gebruikersid (FK:id) | status |
-------------------------------------------
| 1       | user01   | Niet beoordeeld    |
| 2       | user01   | Beoordeeld         |
-------------------------------------------

rapportages

-------------------------------------------
| id (PK) | gebruikersid (FK:id) | status |
-------------------------------------------
| 1       | user01   | Beoordeeld         |
| 2       | user01   | Beoordeeld         |
-------------------------------------------

eindgesprekken

-------------------------------------------
| id (PK) | gebruikersid (FK:id) | status |
-------------------------------------------
| 1       | user01   | Niet beoordeeld    |
| 2       | user01   | Beoordeeld         |
-------------------------------------------

Я хочу, чтобы запрос выбирал записи из «stoftesten», «eindgesprekken» и «rapportages», где статус«Niet beoordeeld», а пользовательская база - «VLB».Тогда я хочу посчитать эти строки и получить число.в этом случае я хочу видеть число 2.

1 Ответ

0 голосов
/ 15 января 2019

Я подозреваю, что вы хотите посчитать пользователей, которые удовлетворяют любому из этих условий.Если это так, я рекомендую EXISTS, а не присоединения:

SELECT COUNT(*) AS Som
FROM users u
WHERE u.rol = 'geleider' and u.basis = '1' AND 
      (EXISTS (SELECT 1
               FROM stoftesten s
               WHERE s.gebruikersids = u.username AND
                     s.status = 'Niet beoordeeld'
              ) OR
       EXISTS (SELECT 1
               FROM eindgesprekken e
               WHERE e.gebruikersids = u.username AND
                     e.status = 'Niet beoordeeld'
              ) OR
       EXISTS (SELECT 1
               FROM rapportages r
               WHERE r.gebruikersids = u.username AND
                     r.status = 'Niet beoordeeld'
              )
      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...