Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Join gdy nie ma wartości w tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
mode5
Mam projekt z - w uproszczeniu - taką strukturą tabeli:
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...
kajzur
Zrób UNION z SELECT'em podobnym do tego ale z tym drugim warunkiem innym.
mode5
Dzięki, naprowadziłeś mnie na rozwiązanie.
Na początku myślałem, że Twoja porada mi nie pomoże - dopóki nie doczytałem, że można używać 'fałszywych' kolumn, wypełnionych nullami, aby liczba kolumn dla UNION się zgadzała. Nie jest to może wyrafinowane, ale wystarczające.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.