Komplizierte SQL-Abfrage
-
grr sry für doppelpost aber die komische Firewall oder was auch immer hier hat mir gesagt das mein post beim erstenmal nicht durchkam
-
Genau.
Der Fehler ist mir eigentlich klar:
Angenommen, ich habe einen User zu dem 3 Disziplinen gehören. Zu Disziplin 1 gehört 1 Ergebnis, zu Disziplin 2 gehören 2 Ergebnisse und zu Disziplin 3 gehören 3.
Dann liefert mir meine zweite Abfrage ja jedes Ergebnis auch noch mit zurück. Sieht man sehr schön, wenn man folgendes macht:SELECT users.ID, users.Name, disciplines.ID, results.ID from users, disciplines, results where users.ID=disciplines.UserID AND disciplines.ID=results.disciplineID
Die Ausgabe ist dann:
users.ID, users.Name, disciplines.ID, results.ID 1 Foo Bar 1 1 1 Foo Bar 2 2 1 Foo Bar 2 3 1 Foo Bar 3 4 1 Foo Bar 3 5 1 Foo Bar 3 6
Echt doof...
-
Mhmh mein SQL ist tierisch eingerostet aber
SELECT users.ID, users.Name, disciplines.ID from users, disciplines where users.ID=disciplines.UserID AND disciplines.ID=results.disciplineID group by users.ID, users.Name
versuchs mal so. Bin mir nicht sicher ob du die result Tabelle angeben musst wenn du sie nicht anzeigen willst.
-
Ich kann's gerade nicht testen, aber ich bezweifle, dass das funktioniert. Aus dem einfachen Grund, dass results nicht in der from-Anweisung steht, aber in der where-Anweisung...
-
hm wie gesagt bin zu eingerostet, kann dir da leider nicht helfen
-
dEUs schrieb:
Ich kann's gerade nicht testen, aber ich bezweifle, dass das funktioniert. Aus dem einfachen Grund, dass results nicht in der from-Anweisung steht, aber in der where-Anweisung...
Stimmt auf jeden Fall schon mal.
Hast Du es schon mal mit einem COUNT (DISTINCT disciplines.ID) AS xxx versucht?
-
@Joe:
Das gibt einen Syntaxfehler... DISTINCT darf ich an dieser Stelle nciht verwenden.@Taelan:
Kein Problem, trotzdem danke.
-
Schade. Ich bin hier im Moment etwas im Streß... Aber vielleicht kann ich nachher mal in Ruhe schauen. Sonst morgen.
-
Das wäre super. Dank dir!
-
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