Rainer: Welcher Join

Beitrag lesen

Hi

Inwieweit könnt ihr mir überhaupt helfen, ohne dass ihr den ganzen SQL seht?
jetzt gar nicht mehr :-)

Die Joins sind ein berechtigter Ansatzpunkt, da sie dein Statement mit Sicherheit ins Leere laufen lassen, sobald irgendwo ein Datensatz fehlt. Wenn nach Ersetzen der Joins immer noch nichts kommt ist entweder deren Reihenfolge falsch (--> a LEFT JOIN b benötigt in a Datensätze, in b nicht unbedingt), oder  die WHERE Klausel eliminiert die tatsächlichen Ergebnisse - filtert vielleicht jemand auf eine gültige Spielernummer oder so?
Aber ab jetzt geht das Stochern im Nebel los...

Dann versuch ich mal, auch die Where-Klausel umzuschreiben:

  
  Where  
    Person.Vorname LIKE ("%" + @vorname + "%") AND  
    Person.Nachname LIKE ("%" + @nachname + "%") AND  
    (  
      (@Zielgruppe1 = -1) OR  
      (Zielgruppen.ID = @Zielgruppe1) OR  
      (Zielgruppen.ID = @Zielgruppe2) OR  
      (Zielgruppen.ID = @Zielgruppe3) OR  
      (Zielgruppen.ID = @Zielgruppe4) OR  
      (Zielgruppen.ID = @Zielgruppe5)  
    ) AND  
    (  
      (Konditionen.Preis >= @minPreis OR @minPreis = -1) AND  
      (Konditionen.Preis <= @maxPreis OR @maxPreis = -1 )  
    ) AND  
    (Konditionen.Konzeptionstage <= @vorbereitungszeit OR @vorbereitungszeit = -1) AND  
    (Spieler.inaktiv <= @inaktiv) AND  
    (dbo.FuncSpielerDurchschnittAritm(Spieler.ID) >=  @durchschnitt) AND  
    (Mannschaft.Name LIKE ("%" + @mannschaftName + "%")) AND  
    (  
      AnprechpartnerPersonen.Nachname LIKE ("%" + @ansprechpartner + "%") OR  
      @ansprechpartner = ''  
    ) AND  
    (  
      (@sportart1 =  'default') OR  
      (Sportarten.ID = @sportart1) OR  
      (Sportarten.ID = @sportart2) OR  
      (Sportarten.ID = @sportart3) OR  
      (Sportarten.ID = @sportart4) OR  
      (Sportarten.ID = @sportart5)  
    ) AND  
    (  
      (@verhandelbar = 2) OR  
      (@verhandelbar = Konditionen.Verhandelbar)  
    )  

Zur Erklärung:
Dieser SQL ist Teil einer Prozedur, in denen alle der Prozedur übergebenen Werte mit @ angeprochen werden.
Die Prozedur wird durch ein Suchformular aufgerufen, in dem speziell gefiltert gesucht werden kann.
In diesem Fall kann man sich vorstellen, dass ein großer Verein für die Mannschaftsplanung Spieler suchen und die dann unter Vertrag nehmen kann.

  • Zielgruppe und Sportart sind Multiple-Choice-Selectboxen.
  • dbo.FuncSpielerDurchschnittAritm ist eine MSSQL-Funktion, die die Bewertung des Spielers ausrechnet und die Gesamtbewertung zurückgibt.

Zum Test gebe ich ausschließlich @mannschaftsName (also das entsprechende Formularfeld) an, indem ich dort einen Namen eingebe, unter dem ich Mannschaften finden müsste, aber keine zugehörigen Spieler.

Kann man dort den Fehler erkennen?

MfG
Rainer