Abfrage aus 4 Tabellen
Marcus Halba
- datenbank
0 glan0 Frank (no reg)
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
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!!
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.
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