Subquery liefert entweder Fehlermeldung oder irgnoriert die Bedingung

Mole696

Benutzer
Beiträge
6
Guten Tag liebe Forumsmitglieder.

Für ein Projekt, welches ein Computerprogramm (geschrieben in C#) und den MySQL Datenbanken arbeitet, benötige ich Hilfe. Beim Suchalgorithmus (SQL) hakt es, umfasst bis zu 14 Subqueries. Ist eigentlich das Endstück des ganzen Programms, aber komme da schon seit einiger Zeit nicht weiter.

Vielleicht kurze Beschreibung um was es geht:

Habe in C# ein Programm geschrieben, welches in die Datenbank(en) speichert, updated, und auch inseriert. Es geht um Fußball, bzw. die Ligen und die Mannschaften (rein die Tabellen, Manschaftsname, Tore, Punkte, etc.)
Hierbei gibt es 5 Tabellen:
- Begegnungstabelle (hier sind die Spiele (Heimmannschaft und Gastmannschaft) nach Spieltag und Datum sortiert eingetragen. Muss noch manuell eingetragen werden, da ich noch Anfänger im Programmieren bin und auch nicht weiß wer mir die Daten liefert, bzw. wie ich diese erhalten kann)
(Mithilfe des C# Programms muss ich später nur noch die Ergebnisse eines Spiels eintragen, alle anderen Tabellen werden automatisch aktualisiert)
- Gesamttabelle (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)
- Heimtabelle (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)
- Auswärtsttabelle (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)
- Formtabelle (Die letzten 5 Spiele sind aufgeführt) (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)

Der Algorithmus für die Suche, welche mir ein Spiel raussuchen soll von der Begegnungstabelle, anhand des Datums... ergibt paar Spiele. Anschließend soll der Algorithmus die Heimmannschaft aufgreifen und abfragen ob diese mehr als 10 Punkte auf der Formtabelle hat, anschließend auf der Gesamttabelle soll die Heimmannschaft nicht schlechter als Platz 8 v. 18 stehen, usw.


Habe z.B. diese Abfrage geschrieben:

select Spieltag, Datum, Heimmannschaft , Gastmannschaft from begegnung WHERE Datum='2020.11.21'

AND Heimmannschaft IN (Select Mannschaft From Formtabelle Where Punkte>=10)

AND (SELECT Punkte FROM gesamttabelle WHERE Heimmannschaft=Mannschaft order by Punkte DESC Limit 5)
;

Um zu überprüfen ob das überhaupt so funktioniert, habe ich das Limit mal auf 4 gesetzt, wobei dann kein Ergebnis zurück geliefert werden sollte, aber wird. Denn die Heimmannschaft ist auf der Gesamttabelle auf Platz 5. Egal welche Zahl ich eingebe, es kommt ein Ergebnis zurück. Einmal hat die Workbench gebracht, dass in dieser Version (8.0.18) die Limit Funktion nicht in einer Subquerie zur Verfügung steht, wenige Tage später brachte er den Fehler nicht mehr, aber die Funktion ist nicht gegeben.

Dachte auch, dass ich Quasi mit lauter AND in der WHERE Klausel weiter komme und so meinen Filter immer verfeinere, aber bin mir unsicher. Unterabfragen, die in Korrelation zueinander stehen, käme auch in Betracht, aber bin da überfordert zu wenig lern Beispiele, habe nur ein Buch über SQL.

Falls ihr weitere Infos oder Screenshots oder dergleichen braucht, kein Problem.

Bitte den Holzhammer verzuckern, bin Anfänger und habe, naja, einen Schwerbehindertenausweis, weshalb ich mich mit manchen Sachen sehr schwer tue. Mache das auch schlicht mit dem Ziel, meine Datenbank zu füllen, das Programm soll mir Spiele finden, auf die ich Wetten platziere, um damit eine Behandlung zu finanzieren.

Danke für eure Mühe
 
Werbung:

Dukel

Datenbank-Guru
Beiträge
512
Hierbei gibt es 5 Tabellen:
- Begegnungstabelle (hier sind die Spiele (Heimmannschaft und Gastmannschaft) nach Spieltag und Datum sortiert eingetragen. Muss noch manuell eingetragen werden, da ich noch Anfänger im Programmieren bin und auch nicht weiß wer mir die Daten liefert, bzw. wie ich diese erhalten kann)
(Mithilfe des C# Programms muss ich später nur noch die Ergebnisse eines Spiels eintragen, alle anderen Tabellen werden automatisch aktualisiert)
- Gesamttabelle (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)
- Heimtabelle (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)
- Auswärtsttabelle (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)
- Formtabelle (Die letzten 5 Spiele sind aufgeführt) (nach Mannschaft, absolvierte Spiele, Tore, Gegentore, Differenz, Punkte)

Unabhängig von deinem Problem: Wieso so viele Tabellen? Die ganzen Tabellen lassen sich doch mit Abfragen von der Begebnungstabelle ausgeben.
 
Werbung:

dabadepdu

Datenbank-Guru
Beiträge
986
G

select Spieltag, Datum, Heimmannschaft , Gastmannschaft from begegnung WHERE Datum='2020.11.21'
AND Heimmannschaft IN (Select Mannschaft From Formtabelle Where Punkte>=10)
AND (SELECT Punkte FROM gesamttabelle WHERE Heimmannschaft=Mannschaft order by Punkte DESC Limit 5)
Das letzte Select im 2. AND der Where Clause ergibt keinen Sinn. Es produziert eine Zahlenliste, wie das bei "...Heimmannschaft IN (Select..", aber es gibt keinen Operator, der das verarbeitet.

Es produziert am Ende der Abfrage sowas in der Art:
"...
and 12,23,12,54,2,3
;"
 
Oben