michael-s
Goto Top

Spezielle Abfrage über zwei Tabellen

An alle Datenbankprofis,

ich habe folgende Tabellen

Artikel mit den Spalten No,Name,Kategorie1,Kategorie2,Kategorie3
Kategorieren mit den Spalten No,Kat1,Kat2,Kat3,Bezeichnung

ich möchte ein Abfrage über beide Tabellen machen und die Kategorie1 bis Kategorie3 mit der jeweiligen Bezeichnung aus der Kategorieren-Tabelle anzeigen.

Hat jemand dafür eine Idee. Ist Ms SQL Server 2005.
Achja die Tabellen lassen sich leider nicht abändern.

Gruß
Michael-s

Content-ID: 104629

Url: https://administrator.de/contentid/104629

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

pitti08
pitti08 22.12.2008 um 17:43:54 Uhr
Goto Top
Welches sind die Schlüsselfelder für die Verknüpfung?
Ok, ersetzen wir mal Unwissenheit durch Annahme. Das ist immer der erste Schritt in Richtung Fehler.
Wir nehmen an: Artikel.Kategorie1..3 sind mit Kategorieren.No verknüpft.
Dann bräuchten wir hier nur noch 3 joins und fertig.
Syntax bitte im Handbuch unter select...join nachschlagen.
Gruß Pitti
michael-s
michael-s 22.12.2008 um 19:09:56 Uhr
Goto Top
leider nicht Kategorie 1..3 sind mit Kat 1..3 verknüpft, sonst wäre es über joins lösbar... hab ich auch schon probiert.

Die Schlüsselfelder, sind die No und kat 1 bis 3.

Hat noch jemand eine Idee?
Biber
Biber 22.12.2008 um 19:39:24 Uhr
Goto Top
Moin michael-s,

leider nicht Kategorie 1..3 sind mit Kat 1..3 verknüpft, sonst wäre es über joins lösbar... [...}
Die Schlüsselfelder, sind die No und kat 1 bis 3.

Kannst Du das bitte mal für ältere/phantasieärmere Mitglieder wie mich mal an einem Datensatzbeispiel beschreiben?

Grüße und danke
Biber
pitti08
pitti08 22.12.2008 um 19:43:25 Uhr
Goto Top
nochmal zum Verständnis:

select * from artikel
left join kategorie on artikel.Kategorie1=kategorie.Kat1, artikel.Kategrorie2=kategorie.Kat2, artikel.Kategorie3=kategorie.Kat3

funktioniert dann deshalb nicht, weil artikel.kategorie1 in kategorie.kat3 oder in kategorie.kat2 oder kategorie.kat1 stehen kann?
michael-s
michael-s 22.12.2008 um 21:27:03 Uhr
Goto Top
Zum Beispiel:

in der Artikeltabelle sind folgende infos:
        No:         123                      
        Name:       test                    
        Kategorie1: 10.00.00                 
        Kategorie2: 10.10.00                 
        Kategorie3: 10.10.10

Kategorientabelle:
        no       kat1       kat2      kat3      bezeichnung
        1        10.00.00                       Testname1
        2        10.00.00   10.10.00            Testname2
        3        10.00.00   10.10.00  10.10.10  Testname3
Ich möchte eine Antwort vom SQL die so aussieht:

test, Testname1, Testname2, Testname3

Vielleicht hilft es bei der Lösungsfindung?

Gruß


[Edit Biber: Als < code > formatiert /]
Biber
Biber 22.12.2008 um 21:58:13 Uhr
Goto Top
Ähm ja...

ich gehe davon aus, dass ein Hauptziel des Tabellendesigns die Sicherstellung der Nichtinterpretierbarkeit bei Industriespionage gewesen ist.
Ziel erreicht.

SELECT Artikel.Name, 
ka11.Bezeichnung as Kat1Bez, 
kat12.Bezeichnung as Kat2Bez,
kat123.Bezeichnung as Kat3Bez
FROM Artikel, 
kategorie as Kat1,
kategorie as Kat12,
kategorie as Kat123,
Where 
    Artikel.kategorie1 = kat1.kat1 
and artikel.kategorie2 <> kat1.kat2 
and artikel.kategorie3 <>kat1.kat3
AND     Artikel.kategorie1 = kat12.kat1 
and artikel.kategorie2 = kat12.kat2 
and artikel.kategorie3 <>kat12.kat3
AND     Artikel.kategorie1 = kat123.kat1 
and artikel.kategorie2 = kat123.kat2 
and artikel.kategorie3 = kat123.kat3

Falls mal eine der Kategorie-Bezeichnungen nicht referenziert werden kann, fehlt der ganze Satz ( ein LEFT JOIN ist ja hier kaum möglich).

P.S. Ich weiß nicht, wer das designed hat oder gegen wen, aber - bei dieser Tabellenstruktur kamen zwei Erinnerungen aus meiner Jugend wieder hoch:
  • Ja, auch wir hatten früher einen "Legalize it!"-Aufkleber auf der WG-Tür
  • Gerüchten zufolge werden auch heute noch, vor allem im ländlichen Raum, Leute aus weit geringeren Anlässen gepfählt oder gevierteilt.

Auch da bin ich eigentlich tolerant.

Grüße und viel Glück
Biber