Konto (idkonta, login, blokada konta)
Osoba (imię, nazwisko itd - połączone z tabelą Konto. Poza osobami mam też użytkowników 'instytucjonalnych')
Zawodnik (numer licencji, data rejestracji itd - połączone z osobą kluczem IdOsoby)
OsobaWInstytucji (połączenie osoby z klubami - tu jest największy zonk. Łączy trzy tabele kluczmi obcymi - osobę, klub i funkcję w klubie)
Chciałbym wyświetlać dane łączące tabelę osoby, zawodnika i klubu. Niestety, problem polega na tym, że zawodnik może nie należeć do klubu. Drugi problem polega na tym, że może spełniać różne funkcje (zawodnika, trenera, działacza itd.), co załatwiam polem OsobaWInstytucji.IdFunkcji (to też jest Foreign key, ale pomińmy). Krótko mówiąc - OsobaId może być w tabeli OsobawWInstytucji kilka razy, w tym wcale z IdFunkcji równym 1. Albo ani razu. Kombinacja IdOsoby z IdFunkcji=1 może wystąpić tylko raz.
Kod
SELECT DISTINCT * FROM Osoba JOIN (Zawodnik, Konto, OsobaWInstytucji) ON (Osoba.IdOsoby=Zawodnik.IdOsoby AND Osoba.IdKonta=Konto.IdKonta AND OsobaWInstytucji.IdOsoby=Osoba.IdOsoby AND OsobaWInstytucji.IdFunkcji=1)
Takie zapytanie znajduje mi tylko zawodników którzy są w klubach. Jak mam zmodyfikować zapytanie, aby znaleźć tych, których nie są w tabeli OsobaWInstytucji z wartością IdFunkcji=1? Nic mi nie wychodzi z osobistej dłubaniny...