Monja: SQL - 3 Tabellen verknüpfen

Schönen ersten Adventsonntag!

Echt klasse, dass es dieses Forum gibt - ich habe schon viele hilfreiche Sachen gefunden, nur diesmal muß ich mich selber mal hilfesuchend melden...

Ich habe drei Tabellen (KursDaten, KursZuordnung, KursUGruppen), die ich über die Tabelle KursZuordnung in einer ASP-Seite verknüpfen muss. Die Tabellen schauen so aus:

KursUGruppen:
KUG_index
KG_index
KUG_text
KUG_Beschreibung

KursZuordnung:
KEG_KD_index
KUG_index
KG_index

KursDaten:
KD_index
KD_Bez
... (hier unwichtige weitere Felder)

Die KursDaten.KD_index ist mit einer 1:n mit KursZuordnung.KEG_KD_index und die KursUGruppen.KUG_index ebenfalls mit einer 1:n mit KursZuordnung.KUG_index verknüpft.

Ich brauche nun eine Schleife, wo alle KursUGruppen.KUG_text angezeigt werden, wo KG_index eine bestimmte Zahl ist (kein Problem, das übergebe ich per QueryString und kann´s auch problemlos abfragen) und dann alle KursDaten.KD_Bez, die zu dieser KursUGruppe zählen.

Also beispielsweise ist die KG_index bei KursUGruppen 10, dann brauch ich alle Überschriften (KUG_text) dazu und dann darunter die entsprechenden Kurse, die über die KursZuordnung verknüpft sind.

Ich probiere schon über eine Woche herum, aber ich bekomme ich wildestens Fehlermeldungen. Hab´s mit JOINs versucht, bekam diese Fehlermeldung: join expression not supported. Hab´s mit verschachtelten WHERE-Abfragen versucht, dann kam das: At most one record can be returned by this subquery.

Die ganzen index-Felder sind blöderweise als Strings definiert, nicht als Zahlen oder Autowert. Kann das vielleicht derAuslöser des Problems sein? Ich greife über ADO / Driver={Microsoft Access Driver (*.mdb)} von den Online-Seiten auf meine MDB zu...

Habe auch einen Screenshot der Beziehungen eingefügt... vielleicht könnte mir jemand mit ein paar Tipps weiterhelfen, ich bin mit meinem Latein am Ende...

Besten Dank!!
Monja

  1. Hallo Monja,

    Ich habe drei Tabellen (KursDaten, KursZuordnung, KursUGruppen), die ich über die Tabelle KursZuordnung in einer ASP-Seite verknüpfen muss. Die Tabellen schauen so aus:

    momentan wird gerade an einem oder zwei Artikel zu diesem Thema gearbeitet, Links zu den bisherigen Entwürfen findest Du in folgendem Thread fünf Threads tiefer.

    KursUGruppen:
    KUG_index
    KG_index
    KUG_text
    KUG_Beschreibung

    KursZuordnung:
    KEG_KD_index
    KUG_index
    KG_index

    warum hier wieder die Spalte "KG_index"? Die scheint mir redundant zu sein.

    KursDaten:
    KD_index
    KD_Bez
    ... (hier unwichtige weitere Felder)

    Die KursDaten.KD_index ist mit einer 1:n mit KursZuordnung.KEG_KD_index und die KursUGruppen.KUG_index ebenfalls mit einer 1:n mit KursZuordnung.KUG_index verknüpft.

    Ich brauche nun eine Schleife, wo alle KursUGruppen.KUG_text angezeigt werden, wo KG_index eine bestimmte Zahl ist (kein Problem, das übergebe ich per QueryString und kann´s auch problemlos abfragen) und dann alle KursDaten.KD_Bez, die zu dieser KursUGruppe zählen.

    Hmm, soweit ich das sehe, sollte folgendes SQL-Statement das Gewünschte liefern:

    SELECT  
      KUG.KUG_text,  
      KD.KD_Bez  
    FROM (KursUGruppen AS KUG  
    INNER JOIN KursZuordnung AS KUZ  
    ON KUG.KUG_index = KUZ.KUG_index)  
    INNER JOIN KursDaten AS KD  
    ON KUZ.KEG_KD_index = KD.KD_index  
    WHERE KUG.KG_index = <zahl>  
    
    

    Also beispielsweise ist die KG_index bei KursUGruppen 10, dann brauch ich alle Überschriften (KUG_text) dazu und dann darunter die entsprechenden Kurse, die über die KursZuordnung verknüpft sind.

    was verstehst Du unter "darunter die entsprechenden Kurse"?

    Ich probiere schon über eine Woche herum, aber ich bekomme ich wildestens Fehlermeldungen.

    Die ganzen index-Felder sind blöderweise als Strings definiert, nicht als Zahlen oder Autowert.

    Da die Verknüpfungen in der DB erstellt werden konnten, sehe ich da kein großes Problem. Die Jet-Engine (das Datenbankmanagementsystem hinter Access) lässt diese nur zu, wenn die Felder den gleichen Datentyp und die gleiche Feldgröße aufweisen.

    Kann das vielleicht derAuslöser des Problems sein? Ich greife über ADO / Driver={Microsoft Access Driver (*.mdb)} von den Online-Seiten auf meine MDB zu...

    Hast Du schon einmal versucht, Deine Abfrage mit dem Abfrageneditor von MS Access zu erstellen. Die hier sollte damit problemlos zu machen sein :-)

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      momentan wird gerade an einem oder zwei Artikel zu diesem Thema gearbeitet, Links zu den bisherigen Entwürfen findest Du in folgendem Thread fünf Threads tiefer.

      DANKE!

      warum hier wieder die Spalte "KG_index"? Die scheint mir redundant zu sein.

      Da hast Du recht, aber der Datenbankersteller hat hier trotzdem ganz brav alle KG_indexes von den KursUGruppen nochmal reingeschrieben. Vielleicht kann ich´s ja wo anders mal gebrauchen... ;-)

      Hmm, soweit ich das sehe, sollte folgendes SQL-Statement das Gewünschte liefern:

      SELECT

      KUG.KUG_text,
        KD.KD_Bez
      FROM (KursUGruppen AS KUG
      INNER JOIN KursZuordnung AS KUZ
      ON KUG.KUG_index = KUZ.KUG_index)
      INNER JOIN KursDaten AS KD
      ON KUZ.KEG_KD_index = KD.KD_index
      WHERE KUG.KG_index = <zahl>

        
      Klasse, da kommt auf jeden Fall schon mal was dabei raus! Seltsamerweise kommen aber nicht nur die Felder WHERE KUG.KG\_index = 10 (Beispiel) dabei raus, sondern es werden einfach alle Kurse angezeigt...  
        
      
      > > Also beispielsweise ist die KG\_index bei KursUGruppen 10, dann brauch ich alle Überschriften (KUG\_text) dazu und dann darunter die entsprechenden Kurse, die über die KursZuordnung verknüpft sind.  
      >   
      > was verstehst Du unter "darunter die entsprechenden Kurse"?  
        
      Die KursUGruppen enthält ja bei KUG\_text die Überschrift der Kursübergruppen. Also zum Beispiel "Kurse für Senioren" oder "Englisch-Kurse". Darunter sind dann über die KursZuordnung andere Einzelkurse aus KursDaten drinnen, zB. bei "Englisch-Kurse" sowas wie KursDaten.KD\_Bez: "English for beginners" oder "English for Runaways ;-)". Es sollte so angezeigt werden, dass als Überschrift "Englisch-Kurse" ausgegeben wird, und darunter eine Liste mit den dazugehörigen Kursen.  
        
      zB so:  
        
      Englisch-Kurse  
        English for Beginners  
        English for Runaways  
        ...  
        
      Kann ich da mit einer If-Schleife weiterkommen?  
        
      Danke schonmal vorab für die Tipps!  
        
      Beste Grüße,  
      Monja