Rozważmy trzy tabele -MySQL: kwerendy SQL zwraca wiersz tylko wtedy, gdy wszystkie wiersze spełniają warunek
users
id | type
-----------|------------
1 | a
2 | b
3 | c
types
id | type
-----------|------------
a | X
a | Y
b | X
c | X
c | Y
c | Z
training_status
id | training| status
-----------|-----------|-------------
1 | X | F
2 | X | S
2 | Y | S
3 | X | F
3 | Y | S
Każdy użytkownik ma typ i rodzaje określa szkoleń, że każdy użytkownik danego typu mają do kompletny.
training_status
zawiera status wszystkich szkoleń, które użytkownik wykonał i jego wynik (S, F). Jeśli użytkownik jeszcze nie podejmie szkolenia, nie będzie żadnego rzędu dla tego szkolenia.
Chciałbym dowiedzieć się wszystkich użytkowników, którzy pomyślnie ukończyli wszystkie szkolenia, które muszą podjąć.
Tutaj jest kierunek, który mam na myśli:
select
id
from users
join types
using (type)
left join training_status
using (id,type)
where status NOT IN(None, F);
Oczywiście nie jest to prawda zapytania, ponieważ nawet jeśli użytkownik dokonał jednego z treningów, mamy ten wiersz. W powyższym przykładzie chciałbym uzyskać id = 2, ponieważ ukończył oba treningi tego typu.
odpowiedzi dzięki Piotra: 'SELECT id, SUM (stan jest zerowy lub status nie jest 'S') jako oczekujący od użytkowników przyłączyć rodzajów korzystania (typ) dołączyć training_status korzystania (id, training) grupa według id mając oczekującą = 0; ' –