Pomoc z zapytaniem SQL

Pomoc z zapytaniem SQL
Severus Snape
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
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.

Kopiuj
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?

Krzysztof Pe
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
1

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

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1
Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.