Kalle_B: JOIN - Problem

Hallöle,

wenn per JOIN mehrere Datensätze zu einem bereits ausgewählten hinzukommen, wird der ausgewählte vervielfacht.

Beispiel:

SELECT    wgr.warengruppe, prod.produkt
LEFT JOIN produkte prod
ON        prod.wgruppen_id = wgr.id
FROM      warengruppen wgr

Gemüse Blumenkohl
Gemüse Sellerie
Obst   Apfel
Obst   Apfelsine
Obst   Banane
Wurst  NULL

Obst wird dreimal genannt, obwohl es die Warengruppe Obst nur einmal gibt. Wie mache ich es, dass die Warengruppe nur einmal kommt, also so etwa:

Gemüse Blumenkohl
NULL   Sellerie
Obst   Apfel
NULL   Apfelsine
NULL   Banane
Wurst  NULL

Hier nur das Prinzip, es geht um ein komplexeres Ergebnis. Eine Auswertung wäre damit wesentlich einfacher.

LG, Kalle

  1. Hello,

    Hier nur das Prinzip, es geht um ein komplexeres Ergebnis. Eine Auswertung wäre damit wesentlich einfacher.

    mehrere Datensätze erschaffen? gar nicht, du wirst Auswertungslogik außen herum setzen müssen, Stichwort Gruppenwechsel.

    einen Datensatz erschaffen? mit einer entsprechenden Gruppierungsfunktion, z.B. GROUP_CONCAT.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Death is nature's way of telling you to slow down.
    1. Hallo, Rouven,

      vielleicht ist mein Anliegen doch nicht richtig rübergekommen. Ich poste mal das Original- Ergebnis:

      3 98754 4208 Adam Opel GmbH 11205 4207 FPM: Aktuelle Herausforderungen und Trends
      3 98754 4208 Adam Opel GmbH 11208 4204 FPM: Aktuelle Herausforderungen und Trends
      3 98754 4208 Adam Opel GmbH 11234 4206 FPM: Aktuelle Herausforderungen und Trends
      3 98754 4208 Adam Opel GmbH 11236 4205 FPM: Aktuelle Herausforderungen und Trends
      3 98754 4208 Adam Opel GmbH 11238 4203 FPM: Aktuelle Herausforderungen und Trends

      Hier ist zu sehen, dass person_id 4208 einen Gesprächstermin bei Opel hat, seine 5 Kollegen aber im Workshop FPM: Aktuelle ... sitzen. Ich brauche 6 Ergebniszeilen, nicht 5.

      Mein Wunsch- Ergebnis wäre dieses:

      3 98754 4208 Adam Opel GmbH NULL  NULL NULL
      3 NULL  NULL NULL     11205 4207 FPM: Aktuelle Herausforderungen und Trends
      3 NULL  NULL NULL     11208 4204 FPM: Aktuelle Herausforderungen und Trends
      3 NULL  NULL NULL     11234 4206 FPM: Aktuelle Herausforderungen und Trends
      3 NULL  NULL NULL     11236 4205 FPM: Aktuelle Herausforderungen und Trends
      3 NULL  NULL NULL     11238 4203 FPM: Aktuelle Herausforderungen und Trends

      Hier das SQL:

      SELECT
       slt1.nr             slot_nr

      ,kon1.id             kon_id
      ,kon1.besucher_id
      ,per1.bezeichnung    aussteller_name

      ,evb1.id             evb_id
      ,evb1.adress_id      evb_adr_id
      ,evt1.name           event_name

      FROM      tm_slots slt1

      -- GEBUCHTE KONTAKTE
      LEFT JOIN tm_kontakte kon1
      #N        kon1.slot_nr=slt1.nr AND ()
      ON        kon1.slot_nr=slt1.nr AND kon1.besucher_id IN (4207,4204,4206,4205,4203,4208)
      -- AUSSTELLER-NAME
      LEFT JOIN tm_adressen AS per1
      ON        per1.id=kon1.aussteller_id
      -- BESUCHER-NAME ZUM KONTAKT WG. SORTIERUNG
      LEFT JOIN tm_adressen AS per2
      ON        per2.id=kon1.besucher_id

      -- GEBUCHTE EVENTS
      LEFT JOIN tm_eventbuchungen evb1
      ON        ( evb1.von_slot_nr=slt1.nr OR evb1.bis_slot_nr=slt1.nr ) AND evb1.adress_id IN (4207,4204,4206,4205,4203,4208)
      -- EVENTNAME
      LEFT JOIN tm_events AS evt1
      ON        evt1.id=evb1.wunsch_event_id
      -- BESUCHER-NAME ZUM EVENT WG. SORTIERUNG
      LEFT JOIN tm_adressen AS per3
      ON        per3.id=evb1.adress_id

      WHERE     slt1.owner_id=5
      ORDER BY  slt1.nr, per2.nname, per2.vname, per3.nname, per3.vname

      LG, Kalle

      1. Hallo, Rouven,

        ich mache zwei SQL- Abfragen und mische sie mir wie gewünscht mit PHP.

        LG Kalle