Über Joins mehrere Schlüssel aus einer Tabelle auflösen

Status
Nicht offen für weitere Antworten.

Taggert

Mitglied
Hallo Jungs und Mädels,

ich hab mal ne Frage zu SQL Joins.

Ich versuch mir eine View zu bauen, die alle relevanten Daten für eine Tabelle enthält. Da eine SQL Engine viel besser dazu geeignet ist, die Fremdsschlüssel aufzulösen, als das mit Java möglich wäre benutze ich LEFT JOINS.

Also nun mal Konkret. Ich habe eine Tabelle mit relativ vielen Schlüsselund will mir diese Schlüssel zu aussagefähigen Namen (für den Benutzer verständliche) mittels einer View umbauen.

Hier eine kleine Auszug aus dem ganzen Ding

-----------------------
| Artikel |
-----------------------
| ID |
| ArtikelName |
|HerstellerID |
|Atrribut1ID |
|Attribut2ID |
-----------------------

-----------------------
|Hersteller |
-----------------------
|HerstellerID |
HerstellerName |
------------------------

-----------------------
|Attribut |
-----------------------
|AttributID |
|AttributeName |
-----------------------

So weit so gut. Ich bekomm die Tabelle der aufgelösten Hersteller ID mit dem folgenden SQL Befehl

select artikelid,herstellername from Artikel
LEFT JOIN Hersteller ON artikel.ID = hersteller. herstellerID

Das ganze funktioniert auch mit dem ersten Attribut
select artikelid,herstellername,attributeName from Artikel
LEFT JOIN Hersteller ON artikel.ID = hersteller. herstellerID
LEFT JOIN Hersteller ON artikel.attribute1ID = attribut. attributeID

Wenn ich das ganze jetzt aber mit dem zweiten Attribut aufrufen will, dann kracht es, da ich ja nun zwei Spalten habe, die AttributeName heißen. Wie krieg ich dieses Problem in den Griff?
 
S

SlaterB

Gast
allgemein kann man Tabellen Bezeichner geben:

select x.a, y.a from table1 x, table2 y
 

Taggert

Mitglied
das ist mir klar, aber ich versteh nicht genau, worauf du raus willst. Die Tabellen heisst ja immer noch so. Ob ich jetzt schreib select attribute.attributID, attribute.attributId oder nur attributeID,attributeID kommt doch auf das selbe raus
 
M

maki

Gast
select artikelid as wasauchimmer,herstellername as firma from Artikel
 

Taggert

Mitglied
Ich bekomm leider immer noch den Fehler:
Not unique table/alias: 'attributeName'


Also hier ist, was ich jetzt geschrieben hab:

select artikelid,herstellername,
attributeName AS attributeName1,
attributeName AS attributeName2
from Artikel

LEFT JOIN Hersteller ON artikel.ID = hersteller. herstellerID
LEFT JOIN Attribut ON artikel.attribute1ID = attribut. attributeID
LEFT JOIN Attribut ON artikel.attribute2ID = attribut. attributeID
 
S

SlaterB

Gast
der Fehler beschreibt genau das, was ich geantwortet habe, wie kann man das nur so ignorieren..,
bei joins ist die Schreibweise freilich evtl. schwieriger:

select a.artikelid, h.herstellername,
x.attributeName AS attributeName1,
y.attributeName AS attributeName2
from Artikel a
LEFT JOIN Hersteller h ON a.ID = h. herstellerID
LEFT JOIN Attribut x ON a.attribute1ID = x. attributeID
LEFT JOIN Attribut y ON a.attribute2ID = y. attributeID

oder vielleicht
"LEFT JOIN Attribut as y"
siehe SQL-Syntax, evtl. DB-abhängig
 

Taggert

Mitglied
Danke Dir SlaterB, jetzt versteh ich was Du mir sagen wolltest. Vielen Dank für Deine Hilfe, ich werd es gleich probieren.
 

Taggert

Mitglied
hat fast geklappt - ich habs noch etwas umgebaut, dann lief es wie Schmieröl.

Hier mein Code für die Lösung, aber auf die Idee wäre ich ohne Deine Hilfe nie gekommen.

select a1.itemattribute AS attrib1, a2.itemattribute AS attrib2 from artikel
LEFT JOIN itemattribute AS a1 ON artikel.attributeid1 = a1.itemattributeid
LEFT JOIN itemattribute AS a2 ON artikel.attributeid2 = a2.itemattributeid


Vielen Dank für Eure Hilfe, ohne Euch hät ich es nicht geschafft.
Liebe Grüße
Taggert
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben