Marcus Halba: Abfrage aus 4 Tabellen

Hallo Zusammen,

ich habe folgende Aufgabe, die mich und meine rudimentären SQL-Kenntnisse scheitern lässt.

Es gibt vier Tabellen:

1.Tabelle (Artikel) Unique-ID: Artikel_ID

2.Tabelle (Kategorie) Unique-ID: Kategorie_ID

3.Tabelle (Attribut) Unique-ID: Attribut_ID

4.Tabelle (relationArtikel2Kategorie) Unique-ID: RA2C_ID

5.Tabelle (relationArtikel2Attribut) Unique-ID: RA2A_ID

Ich möchte jetzt drei verschiedene Abfragen tätigen:

1. Abfrage: Zeige mir alle Artikel aus der Kategorie "Holz" sortiere nach Preis.

In der Tabelle "relationArtikel2Kategorie" gibt es neben der Zuordnungs-ID (RA2C_ID) die Felder 'Artikel_ID' und 'Kategorie_ID' in der die Beziehung zu den Artikel und zu den Kategorien festgelegt wird. Wenn ich jetzt besagte Abfrage mache, soll nach der Preis-Spalte (Artikel_Preis) in der Artikel-Tabelle sortiert werden, aber nur die Artikel die laut "relationArtikel2Kategorie" der Kategorie "Holz" zugeordnet sind.

2. Abfrage: Zeige mir alle Artikel aus der Kategorie "Keramik" sortiere nach dem Attribut-Wert von "Gewicht".

In der Tabelle "Attribut" wird eingetragen, welche Attribute es gibt (Unique-ID ist 'Attribut_ID'). In der Tabelle "relationArtikel2Attribut" werden die vorhandenen Attribute über die Felder 'Artikel_ID' und 'Attribut_ID' dem Artikel zugeordnet. Außerdem wird in der Tabelle´"relationArtikel2Attribut" auch der Wert für dieses Attribut festgelegt, z.B.: 800 Gramm. Die Abfrage soll mir also alle Artikel anzeigen, die laut Tabelle "relationArtikel2Kategorie" in der Kategorie "Keramik" sind, das Attribut Gewicht haben und dann nach dem Gewichts-Wert sortieren.

3. Abfrage: Zeige mir alle Artikel aus der Kategorie "Plastik" die das Attribut "handbemalt" haben

Wie oben erwähnt: In der Tabelle "Attribut" wird festgelegt, dass es das Attribut "handbemalt" gibt. In der Tabelle "relationArtikel2Attribut" wird über die Felder 'Artikel_ID' und 'Attribut_ID' festgelegt, dass der Artikel das Attribut "handbemalt" hat und der Attribut-Wert steht somit einfach auch 1.

Ich hoffe inständig, dass mir jemand helfen kann.

Vielen Dank im voraus

Marcus Halba

  1. Hallo,

    Das ist viel.

    also, ich hab keinje Ahnung in welcher ProgSprache dus machen willst, aber ist ja egal :-)

    Ich zeige dir jetzt mal nur "Schnipsel", wie man das machen kann:

    Ordenen:

      
    ORDER BY  
        `ROWNAME` DESC  
    
    ~~~ (absteigend)  
    oder  
    ~~~sql
      
    ODER BY  
        `ROWNAME` ASC  
    
    ~~~ (aufsteigend)  
    aber immer am ende der Abfrage!  
      
    Mehrere Tabellen gleichzeitig abfragen:  
      
    z.B.  
    ~~~sql
      
    SELECT  
        tabellennamedertabelleeins.rowname,  
        tabellennamedertabellezwei.rowname  
    FROM  
        tabellennamedertabelleeins,  
        tabellennamedertabellezwei  
    WHERE  
    
    ~~~ ...  
      
      
    Am Ende stellt sich allerdings eine ganz andere Frage:  
    Kann man das Ganze denn nicht alles in eine Tabelle stecken?  
      
      
    MfG
    
    -- 
    SELF forever  
      
    [Mein Selfcode:](http://adi.kousz.ch/scodec/selfcode.cgi) ie:% br: fl:{ va:{ ls:& fo:| rl:( n4:( de:> ss:{ ch:? js:{ mo:| sh:( zu:{  
      
    Mein Tipp: Opera verwenden, nicht den Bugbrowser(IE) oder FF!!
    
    1. SELECT
          tabellennamedertabelleeins.rowname,
          tabellennamedertabellezwei.rowname
      FROM
          tabellennamedertabelleeins,
          tabellennamedertabellezwei
      WHERE

      
      >   
      > Am Ende stellt sich allerdings eine ganz andere Frage:  
      > Kann man das Ganze denn nicht alles in eine Tabelle stecken?  
        
      Die o.g. Abfrage ist problematisch, da die Ergebnismenge unerwartet ausfallen dürfte (selbst mal ausprobieren). Besser ein UNION SELECT (ALL) machen oder einen ordentlichen JOIN.  
        
      Und, klar, eine Tabelle ist besser als zwei Tabellen - falls es geht.
      
  2. Hi,

    wo ist das Problem? Du benutzt JOINs, mit welchen du die Tabellen zusammen fügst und ORDER BY mit dem richtigen Spaltennamen.

    Die 4. und 5. Tabelle sollten ausser diesen lustig benannten Unique (Primary) Keys auch Foreign Key (dt: Fremdschlüssel) auf die jeweiligen Tabellen Artikel & Attribut/Kategorie haben?

    Ich nehme an, du bist mit dem Konzept von JOINs nicht vertraut? Dann solltest du dich im Referenzhandbuch deines Datenbanksystems belesen.

    Gut Nacht,
    Frank