tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
283
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    70mark 70mark ist offline Mitglied
    Registriert seit
    Feb 2011
    Beiträge
    12
    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
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  3. #3
    70mark 70mark ist offline Mitglied
    Registriert seit
    Feb 2011
    Beiträge
    12
    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

  1. Verbesserungsvorschlag bei LEFT JOIN Abfrage
    Von jaegerschnitzel im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 15.01.09, 15:43
  2. MySQL: Abfrage mit 2 Left Joins
    Von resterampe im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 23.10.08, 13:01
  3. Join's Visualisierung in MySQL
    Von FunkyMonkey im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 04.09.07, 11:40
  4. abfrage ohne left join?
    Von seelenflug im Forum PHP
    Antworten: 6
    Letzter Beitrag: 23.06.05, 21:42
  5. Problem mit left joint abfrage
    Von MrHankey im Forum Relationale Datenbanksysteme
    Antworten: 13
    Letzter Beitrag: 18.06.04, 14:51