Vinzenz Mai: join - mehrere zeilen einer zeile zuordnen

Beitrag lesen

Hallo Kim,

meine bisherige Ausgabe war immer:

Überschrift zur Veranstaltung mit id=1 (über vid verknüpft)
von: 2005-10-05 bis: 2005-10-09
Überschrift zur Veranstaltung mit id=1 (über vid verknüpft)
von: 2005-11-05 bis: 2005-11-09
Überschrift zur Veranstaltung mit id=1 (über vid verknüpft)
von: 2005-12-05 bis: 2005-12-09

das Ziel ist aber:

Überschrift zur Veranstaltung mit id=1 (über vid verknüpft)
von: 2005-10-05 bis: 2005-10-09
von: 2005-11-05 bis: 2005-11-09
von: 2005-12-05 bis: 2005-12-09

d.h. wohl, ich bräuchte 2 verschachtelte sql abfragen.

nein, das geht über Standard-SQL hinaus. Normalerweise machst Du so etwas in der Anwendung (also nicht in SQL). Du gibst einmal die Überschrift aus, dann die zugehörigen Zeilen. Als Suchbegriff dürfte Dir "Gruppenwechsel" weiterhelfen.

Wenn Du alle Verstaltungen, sortiert nach der id (nicht besonders gutes Sortierkriterium), untereinander ausgeben lassen willst, innerhalb einer Veranstaltung jeweils nach dem Beginn der Veranstaltung, verwende die ORDER-BY-Klausel:

  
SELECT  
  ueberschrift,  
  beginn  
  ende  
FROM veranstaltungen v     -- v wie _v_eranstaltungen  
INNER JOIN termine t       -- t wie _t_ermine  
ON v.id = t.vid  
ORDER BY v.id, beginn      -- Standardsortierung ist aufsteigend  

Bei der Ausgabe gehst Du in etwa wie folgt vor:

Gemerkte Überschrift = leere Zeichenkette
Solange es Zeilen in der Ergebnismenge gibt
    Nimm die nächste Zeile
    Lese die Überschrift
    Wenn es eine neue Überschrift ist
        Merke die Überschrift
        Gebe die Überschrift aus
    Ende Wenn
    Gebe den Termin aus
Ende Solange

Freundliche Grüße

Vinzenz