Meike: Treffer aus zweiter Tabelle ermitteln

Moin in die Runde,

Ich würde gerne die Anzahl der Einträge aus der zweiten tabelle ermitteln. Ich bekomme zwar ein Ergebnis, das aber stimmt leider nicht mit den Einträgen überein!

Es kommt nur eine Zeile und bei Anzahl 11 raus(da werden alle Einträge gezählt).

Es sollte aber 4 Zeilen und je Zeile beu anzahl 0, 2, 1, 8, rauskommen


SELECT a.*,count(b.id) AS anzahl FROM tab1 a 
LEFT JOIN tab2 b ON b.id_zuordnung = a.id
  1. Hallo Meike,

    ich verstehe leider nicht ganz so genau, was du tust und vorhast, aber ich glaube, unsere Einführung in Joins könnte für das Verständnis hilfreich sein.

    Bis demnächst
    Matthias

    --
    Du kannst das Projekt SELFHTML unterstützen,
    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
  2. Hallo Meike,

    die Lösung deines Problems heißt GROUP BY.

    COUNT ist eine der Aggregierungsfunktionen (MIN, MAX, SUM, AVG, COUNT). Sie verdichten die in der Abfrage gebildeten Gruppen jeweils auf eine einzige Zeile. Wenn keine Gruppen gebildet werden, verdichten sie die komplette Abfrage auf eine Zeile.

    Zu COUNT(*) vs COUNT(b.id): Du machst einen LEFT JOIN, d.h. es kann Ergebniszeilen geben, in denen die Spalten auf tab2 NULL sind, weil dafür keine Zuordnung gefunden wird. Wenn Du diese Zeilen nicht mitzählen willst, dann machst Du es mit COUNT(b.id) richtig.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Meine Tabellen sind so:

      tab1 A

      Id	titel
      1	titel1
      2	titel2
      3	titel3
      4	titel4
      

      tab2 B

      id	titel	id_zuordnung
      1	titel-1		1
      2	titel-2		1
      3	titel-3		1
      3	titel-4		2
      
      

      Ja, wenn nix da ist sollte es null sein, aber meine Abfrage gibt trotzdem nur eine Zeiel aus.

      SELECT a.*,count(b.id) AS anzahl FROM tab1 a 
      LEFT JOIN tab2 b ON b.id_zuordnung = a.id
      
      
      1. Hallo Meike,

        Computer tun nicht, was sie sollen. Sie tun das, was man ihnen sagt. Und du sagst ihm: Verdichte alle Ergebniszeilen zu einer. Warum dein SQL das bewirkt, habe ich vorhin erklärt: Du gruppierst nicht.

        Und leider erklärst Du nicht, was Du statt dessen haben willst. Zumindest nicht so genau, dass man darauf aufsetzen kann. Du müsstest uns sagen, welches Ergebnis du erwartest, mit einer Erklärung, warum Du gerade das und nichts anderes erwartest. Schreib die erwarteten Ergebniszeilen der Query auf.

        Wenn Du die Erklärung im Wiki nicht gelesen hast: Shame on you. Wenn Du sie nicht verstanden hast: Shame on me, möglicherweise. Weil der Teil des Wiki-Artikels von mir ist 😳. Lies nochmal, fang mit 2.8 (COUNT) an. Frag, was Du nicht verstanden hast. Oder mach ein paar Versuche mit GROUP BY und COUNT, um Dir klarzumachen, was da eigentlich passiert.

        Rolf

        --
        sumpsi - posui - obstruxi