Komplizierte SQL-Abfrage
-
Achja falls du nur mal Befehle ausprobieren willst und dafür nicht immer die Befehle in deinem Prog ändern willst bzw dich zu den befehlen durchklicken oder was auch immer hier ein Prog:
DBDudewurd mal von nem Studenten an meiner FH in Java programmiert, obs nützlich ist überlass ich dir ^^
Zum rumprobiern taugts zumindest was
-
Hi DEUs,
irgendwie habe ich hier den Faden verloren... Welche Felder möchtest Du in Deinem Select haben? Den Namen und die ID-Counts der anderen Tabellen?
-
Ich möchte den Namen und die Anzahl der Disziplinen die den Kriterien entsprechen.
-
Dann mach es doch per Subselect.
SELECT users.ID, users.Name, count (disciplines.ID) from users, disciplines where users.ID=disciplines.UserID AND disciplines.ID IN SELECT disciplineID FROM results WHERE results.disciplineID = users.ID group by users.ID, users.Name
Sollte eigentlich so funktionieren, habs aber nicht getestet.
-
Ach das geht ?! Genau sowas habe ich mir schon überlegt, aber dachte nciht, dass das tut. Da siehst mal, wie wenig Ahnung ich von SQL hab
Tausend Dank!
-
Kommt auf die Datenbank an!
MfG SideWinder
-
@SideWinder: Welche können es denn nicht? Mir fällt so spontan nur MySQL ein, aber seit Version 4 (?) sollte auch MySQL das können.
@dEUs: Gerne geschehen. Was hast Du denn für eien DB? Schon ausprobiert, ob Subselects funktionieren?
-
Es ist eine Access- und eine MySQL-Datenbank. Getestet habe ich es noch nicht.
-
..und wenn nicht dann mach daraus 2 oder mehr selects. ich glaub' keiner zwingt dich alles in ein sql statement zu packen.
-
@dEU wegen deinen doppelten Posts: FROM tabelle1,tabelle2, da bekommst du das Kreuzprodukt der beiden Tabellen. DAher so viele Einträge. Dadurch musst natürlich im WHERE-Teil das wieder rausfiltern oder evtl sogar einen andern JOIN benutzen.
-
Jo, das ist klar.
Ich weiß immer noch nciht, ob der Subselect tut, weil ich ihn nciht getestet habe. Die Abfrage die ich durchführen musste wurde immer komplexer, ich wusste nicht, ob das überhaupt mit SQL geht und hab nen Teil jetzt in C++-Code ausgelagert
-
Der User-Name, wieviele Disziplinen er insgesamt absolviert hat und wieviele davon den Kriterien entsprechen.
Bei genauerem Nachdenken kann das gar nicht mit einem SQL-Statement gehen. Immerhin willst du auf verschiedenen Grundmengen count() ausführen. Das ist afaik nicht drin.
MfG SideWinder
-
zur Not Variablen anlegen und das ganze in mehrere SELECTs aufteilen
-
Wie gesagt, ich habe jetzt einen Hybriden aus 2 SQL-Abfragen und C++-Code gebastelt. Danke für eure Hilfe
-
Ich bin trotzdem der Meinung, dass man dieses Problem in reinem SQL hätte lösen können. Notfalls mit Mehrfachselects auf die gleiche Tabelle und entsprechenden einschränkenden Subselects. Bei größeren Tabellen ist eine solche Vorgehensweise allerding sehr Performancefressend.
-
Möglicherweise. Aber ich hatte ehrlich gesagt nciht den Nerv mich da so tief reinzuarbeiten
-
Joe_M. schrieb:
Ich bin trotzdem der Meinung, dass man dieses Problem in reinem SQL hätte lösen können. Notfalls mit Mehrfachselects auf die gleiche Tabelle und entsprechenden einschränkenden Subselects. Bei größeren Tabellen ist eine solche Vorgehensweise allerding sehr Performancefressend.
Imho aber immer noch schneller auf der DB als die Implementierung in C-Code.
MfG SideWinder
-
in reinem sql geht es vielleicht als 'stored procedure'. da hat man auch kontrollstrukturen wie if/then/else usw.
-
net schrieb:
in reinem sql geht es vielleicht als 'stored procedure'. da hat man auch kontrollstrukturen wie if/then/else usw.
dEUs hat bereits die Zieldatenbanken (sofern sich diese Datenbanken nennen dürfen) gepostet, mit denen kann man keine ordentlichen Stored Procedures erstellen.
MfG SideWinder