ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
282
282
EMPFEHLEN
-
Hallo, ich bitte um Hilfe. Ich versuche 2 LEFT JOIN's zu verarbeiten, erhalte aber falsche Ergebnisse. Wie muss ich's richtig machen? Tausend Dank !!
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
tbl_EG ID_EG |EG_FELD1 ------------------ 1 |EG1 2 |EG2 3 |EG3 tbl_Jot ID_Jot |ID_EG |Jot_FELD1 ------------------------------ 1 |2 |Jot1 2 |3 |Jot2 3 |2 |Jot3 4 |1 |Jot4 5 |1 |Jot5 SELECT COUNT(tbl_Jot.ID_Jot) AS MENGE1, tbl_EG.ID_EG, FROM tbl_EG LEFT JOIN tbl_Jot ON tbl_Jot.ID_EG = tbl_EG.ID_EG GROUP BY tbl_EG.EG_FELD1 Ergebnis (funktioniert korrekt): MENGE1 |ID_EG --------------- 2 |1 2 |2 1 |3
bis hier läuft es korrekt. Wenn ich aber u.g. probiere, also aus einer weiteren Tabelle abfrage, stimmt das Ergebnis nicht ...
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
tbl_Anz ID_Anz |ID_EG |Anz_FELD1 ------------------------------ 1 |1 |Anz1 2 |1 |Anz2 3 |3 |Anz3 4 |2 |Anz4 5 |1 |Anz5 SELECT COUNT(tbl_Jot.ID_Jot) AS MENGE1, COUNT(tbl_Anz.ID_Anz) AS MENGE2, tbl_EG.ID_EG, FROM tbl_EG LEFT JOIN tbl_Jot ON tbl_Jot.ID_EG = tbl_EG.ID_EG LEFT JOIN tbl_Anz ON tbl_Anz.ID_EG = tbl_EG.ID_EG GROUP BY tbl_EG.EG_NICK Ergebnis (also so soll es sein): MENGE1 |MENGE2 |ID_EG ----------------------- 2 |3 |1 2 |1 |2 1 |2 |3
-
Annahme: Da du das Problem im PHP-Forum gepostet hast, geh ich davon aus, dass du mit MySQL arbeitest
So auf die Schnelle
Du kannst nicht nach A Gruppieren und B ausgeben. Wenn du die ID_EG ausgibst, muss auch der GROUP BY nach ID_EG sein. MySQL ist da manchmal zu gütig und akzeptiert ungültige Groups
Das Problem ist, dass sich die Datenmenge aufwiegelt.
In der tbl_eg hast du einen Datensatz mit der id_eg=1
Wenn du die tbl_jot anhängst, hast du 2 Einträge mit der id_eg=1. Und zwar ist das
[Anzahl aus tbl_eg mit id_eg=1]*[Anzahl aus tbl_jet mit id_eg=1]
Ergo 1*2=2
Nun hängst du noch die Tabelle tbl_anz an. Diese hat 3 Einträge. Damit multipliziert sich die Menge:
[Anzahl aus tbl_eg mit id_eg=1]*[Anzahl aus tbl_jet mit id_eg=1]*[Anzahl aus tbl_anz mit id_eg=1]
Ergo 1*2*3=6
Du musst die Zählung in den Kind-Tabellen durchführen und dann erst alles zusammenziehen. Alle Quellen müssen die gleiche Aggregation haben.
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
SELECT jot.cnt_jot, anz.cnt_anz, tbl_EG.ID_EG FROM tbl_EG LEFT JOIN ( SELECT id_eg, COUNT(id_jot) AS cnt_jot FROM tbl_Jot GROUP BY id_eg ) AS jot ON jot.ID_EG = tbl_EG.ID_EG LEFT JOIN ( SELECT id_eg, COUNT(id_anz) AS cnt_anz FROM tbl_Anz GROUP BY id_eg ) AS anz ON anz.ID_EG = tbl_EG.ID_EG
Anbei, da es sich um ein reines SQL-Problem handelt, verschiebe ich es mal in den Datenbank-Bereich---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Erstmal sehr vielen Dank !
>> Annahme: Da du das Problem im PHP-Forum gepostet hast, geh ich davon aus, dass du mit MySQL arbeitest
Ja.
>> muss auch der GROUP BY nach ID_EG sein
Hatte ich falsch angegeben.
>> Das Problem ist, dass sich die Datenmenge aufwiegelt.
Das stimmt, bzw. konnte ich beobachten, irgendwas "potenzierte" (vermehrfachte) sich ...
Sehr plausible Erklärung von Dir ...
>> Du musst die Zählung in den Kind-Tabellen durchführen und dann erst alles zusammenziehen
Einleuchtend ...
>> Anbei, da es sich um ein reines SQL-Problem handelt, verschiebe ich es mal in den Datenbank-Bereich
Hatte ich im Eifer des Gefechtes übersehen ... Sorry.
Der Einsatz klappte sofort.
Die Abfrage liefert wie gewollt, nur mir erschließt sich nicht genau, warum ein Ergebnis von 0 Nichts ergibt?
Aber ich muss mir das ganze nochmal genau auf der Zunge zergehen lassen ...
Nochmal sehr vielen Dank !! Echt supi !
Ähnliche Themen
-
Verbesserungsvorschlag bei LEFT JOIN Abfrage
Von jaegerschnitzel im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 15.01.09, 15:43 -
MySQL: Abfrage mit 2 Left Joins
Von resterampe im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 23.10.08, 13:01 -
Join's Visualisierung in MySQL
Von FunkyMonkey im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 04.09.07, 11:40 -
abfrage ohne left join?
Von seelenflug im Forum PHPAntworten: 6Letzter Beitrag: 23.06.05, 21:42 -
Problem mit left joint abfrage
Von MrHankey im Forum Relationale DatenbanksystemeAntworten: 13Letzter Beitrag: 18.06.04, 14:51





Zitieren

Login





