Left Join

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Left Join

    Mir ist grad aufgefallen, dass ich ein falsches Bild von LEFT JOIN gehabt habe.
    Üblicherweise ist der Sinn von A LEFT JOIN B alle Einträge aus Relation A mit etwas oder NULL aus B zu verknüpfen.

    Aber ist das Verhalten richtig: Wenn Ein Eintrag von A mit B mehrmals verknüpft ist, so wiederholen sich die Zeilen von A und haben verschiedene Werte beim Join mit B?
    Ist Distinct auf ne Id die übliche Methode dies zu verhindern?
    SQL Injection kitteh is...

  • #2
    Wenn A in Tabelle B mehrfach vorkommt, ist das Verhalten absolut korrekt.

    Tabelle A (id, typ)
    1 tier
    2 fahrzeug

    Tabelle B (id, typ, name)
    1 1 Katze
    2 1 Hund
    3 2 Auto
    4 2 Fahrrad
    etc...
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Aber wie funzt dann ein count auf so etwas? Also wie baut man ein distinct count auf?

      Ich mein ein SELECT count(a.id) FROM A LEFT JOIN B USING(id) liefert mir auch die doppelten Werte, weder ein GROUP BY noch ein DISTINCT in COUNT hilft mir da
      Zuletzt geändert von Seikilos; 11.04.2009, 22:38.
      SQL Injection kitteh is...

      Kommentar


      • #4
        ich bin mir nicht ganz sicher welches ergebnis du brauchst, aber evtl helfen dir subselects

        Code:
        SELECT a.id,
        
        (SELECT SUM(b.id) FROM TABELLEB b WHERE b.id = a.id ) AS summe 
        
        FROM TABELLEA a
        oder umgekehrt

        (eventuelle fehler sind auf die uhrzeit zurückzuführen , is grad frei aus dem kopf geschrieben)

        Kommentar


        • #5
          Der Code macht keinen Sinn:
          Code:
          SELECT count(a.id) FROM A LEFT JOIN B USING(id)
          Hier kannst du den LEFT JOIN auf B komplett weglassen, weil du nur Werte aus Tabelle A verwendest.

          Kommentar


          • #6
            @Seikilos

            Du willst also die Anzahl der Elemente pro Typ haben?

            Code:
            SELECT
              a.typ, count(b.*)
            FROM
              A
                LEFT JOIN B
                ON (
                  a.id = b.typ
                )
            GROUP BY
              a.typ
            ^^ sollte funktionieren, habs jetzt nur reingehakt.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar

            Lädt...
            X