Probleme bei einer Abfrage

datenmaus

Benutzer
Beiträge
18
Hallo,

ich habe eine Tabelle "Namen" in der gibt es ein Feld "Superid".
eine weiter Tabelle "Schlüssel" und eine Tabelle "Schlüsselname"
In der Tabelle Schlüssel gibt es die "Superid" aus der Tabelle "Namen" und das Feld "Schlüsselid"
In der Tabelle "Schlüsselname" gibt es eine "ID" und das Feld "Bezeichnung".

ich habe nun ein select auf "Namen", alles gut.
Nun brauche ich aber noch zu dem Select auf die Tabelle "Namen" in der Ausgane auch noch das Feld "Bezeichnung" aus Tabelle "Schlüsselname".

Select * from dbo.Name,dbo.schlüssel,dbo,schlüsselname where name.superid=schlüssel.superid

????
Kann mir jemand helfen.

Danke
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
285
Hallo datenmaus,

nach erstem Verständnis hätte ich gesagt, dass die Tabellen in hierarschischem Aufbau zuainander stehen:

[Namen] -- (Superid) -- [Schlüssel] -- (Schlüsselid) -- [Schlüsselname]

Schau mal nach, ob es in der Datenbank FKeys und Beziehungen gibt. Dafür kannst du z.B. die Tabellen einfach einmal in ein Datenbankschema ziehen (im SQL Server Management Studio)
Dann kannst du die Abhängigkeiten auch direkt grafisch dargestellt bekommen und ermitteln (falls diese vorhanden sind).

Eine Abfrage sähe dann meiner Meinung nach wie folgt aus:

Code:
SELECT  [...]
FROM Namen N
LEFT OUTER JOIN Schlüssel S
   INNER JOIN Schlüsselname SN
      ON S.Schlüsselid=SN.ID
   ON N.Superid=S.Superid

Viele Grüße,
Tommi
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Hallo,

ich habe eine Tabelle "Namen" in der gibt es ein Feld "Superid".
eine weiter Tabelle "Schlüssel" und eine Tabelle "Schlüsselname"
In der Tabelle Schlüssel gibt es die "Superid" aus der Tabelle "Namen" und das Feld "Schlüsselid"
In der Tabelle "Schlüsselname" gibt es eine "ID" und das Feld "Bezeichnung".

ich habe nun ein select auf "Namen", alles gut.
Nun brauche ich aber noch zu dem Select auf die Tabelle "Namen" in der Ausgane auch noch das Feld "Bezeichnung" aus Tabelle "Schlüsselname".

Select * from dbo.Name,dbo.schlüssel,dbo,schlüsselname where name.superid=schlüssel.superid

????
Kann mir jemand helfen.

Danke


  • Umlaute in Tabellen- und Spaltennamen bitte vermeiden
  • verwende expliziete JOIN-Syntax
  • bei Dir ist ein Komma, wo sicherlich ein Punkt sein sollte (dbo,schlüsselname)

Code:
test=*# \d namen
     Table "public.namen"
 Column  |  Type   | Modifiers
---------+---------+-----------
 superid | integer | not null
Indexes:
    "namen_pkey" PRIMARY KEY, btree (superid)
Referenced by:
    TABLE "schluessel" CONSTRAINT "schluessel_superid_fkey" FOREIGN KEY (superid) REFERENCES namen(superid)

test=*# \d schluessel
     Table "public.schluessel"
    Column    |  Type   | Modifiers
--------------+---------+-----------
 superid      | integer |
 schluesselid | integer |
Foreign-key constraints:
    "schluessel_schluesselid_fkey" FOREIGN KEY (schluesselid) REFERENCES schluesselname(schluesselid)
    "schluessel_superid_fkey" FOREIGN KEY (superid) REFERENCES namen(superid)

test=*# \d schluesselname
   Table "public.schluesselname"
    Column    |  Type   | Modifiers
--------------+---------+-----------
 schluesselid | integer | not null
 bezeichnung  | text    |
Indexes:
    "schluesselname_pkey" PRIMARY KEY, btree (schluesselid)
Referenced by:
    TABLE "schluessel" CONSTRAINT "schluessel_schluesselid_fkey" FOREIGN KEY (schluesselid) REFERENCES schluesselname(schluesselid)

test=*# select n.*, sn.bezeichnung from schluessel s left join namen n on s.superid=n.superid left join schluesselname sn on s.schluesselid=sn.schluesselid;
 superid | bezeichnung
---------+-------------
(0 rows)

Andreas
 
Oben