Pomoc z zapytaniem SQL

0

Witam,
Muszę wyjąć z bazy dane.
Mam dwie tabele - Klub i Piłkarz. Zakładamy, że piłkarz może grać w wielu klubach
Klub ma dwa atrybuty (Id, Nazwa), a Piłkarz trzy (IdPiłkarza, IdKlubu, Nazwisko).
Chciałbym osiągnąć raport w którym są zawarte wszystkie kluby oraz Nazwisko piłkarza, jeśli gra w danym klubie lub null jeśli nie gra w danym klubie.

SELECT   dbo.Klub.Id AS IdKlubu, dbo.Pilkarz.Nazwisko AS Nazwisko
FROM     dbo.Klub LEFT OUTER JOIN
             dbo.Pilkarz ON dbo.Klub.Id = dbo.Pilkarz.IdKlubu
WHERE   (dbo.Pilkarz.Id = 20)

Czyli w raporcie mają znaleźć się wszystkie KlubId jakie istnieją, i jeśli w danym klubie gra piłkarz o Id=20, to ma być w kolumnie "Nazwisko" nazwisko tego piłkarza, a jeśli nie gra, to w "Nazwisko" ma być null.
Niestety powyższe zapytanie nie dzała poprawnie. Kluby w których dany piłkarz nie gra, nie znajdują się w raporcie.
Czy to związane jest z tym iż WHERE, które wywołuje się na końcu wyrzuca te rekordy?
Jak mogę ominąć ten problem? Czy jedynym wyjściem jest podzapytanie skorelowane w sekcji SELECT?

1

To jest relacja wiele do wiele i potrzebujesz tabeli posredniej. https://en.m.wikipedia.org/wiki/Many-to-many_(data_model)

1
SELECT   dbo.Klub.Id AS IdKlubu, dbo.Pilkarz.Nazwisko AS Nazwisko
FROM     dbo.Klub LEFT OUTER JOIN
             dbo.Pilkarz ON dbo.Klub.Id = dbo.Pilkarz.IdKlubu AND  (dbo.Pilkarz.Id = 20)

Jeśli we WHERE dasz warunek tabelę dowiązaną LEFT JOINEM, to tak jakbyś dał JOIN.

1 użytkowników online, w tym zalogowanych: 0, gości: 1