Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

SQL-Befehl

Lumens77 / 6 Antworten / Baumansicht Nickles

Hallo,
ich habe zwei Tabellen mit folgenden Feldern.

Fach:
Fach, Dozent1, Dozent2, Dozent3, Dozent4

Dozenten:
ID, Name

Die Felder Dozent1 - Dozent4 aus Tabelle Fach referenzieren auf die ID von der Tabelle Dozenten.
Ich möchte quasi ein "SELECT * FROM Fach" machen, wobei ich einen Ergebnissatz bekomme, in welchem aber statt Dozent1 - Dozent4 die Namen der Dozenten drinne stehen aus der Tabelle Dozent.
Wie mache ich das?


Gruß,
Jürgen

bei Antwort benachrichtigen
Lumens77 Nachtrag zu: „SQL-Befehl“
Optionen

Übrigens, natürlich ist Fach eindeutig und es soll nach Fach selektiert werden: also dann quasi "SELECT * FROM Fach where fach="Mathe"". Nur eben anstatt die Dozent1 etc. soll der Name von der Tabelle Dozent eingefügt werden.

Gruß,
Jürgen

bei Antwort benachrichtigen
Borlander Lumens77 „SQL-Befehl“
Optionen

Hallo Jürgen,
ich würde das spontan mit JOIN machen...

Tipp: Einmal JOIN reicht hier nicht, was die Sache aber nut syntaktisch etwas unübersichtlicher macht ;-)


Gruß
Borlander

bei Antwort benachrichtigen
The MOD Lumens77 „SQL-Befehl“
Optionen

Hi,

Wenn ich es richtig verstanden habe, probier mal dies:

Select Name, ID From Dozenten Inner Join Fach on Dozenten.ID=Fach.ID

Dafür muss aber die Tabelle Fach auch die Splate ID haben!

Ohne Gewähr

bei Antwort benachrichtigen
The MOD Nachtrag zu: „Hi, Wenn ich es richtig verstanden habe, probier mal dies: Select Name, ID From...“
Optionen

Vielleicht noch bei Select Fach.Fach inzuschreiben?

Wie gesagt keine Ahnung ob es was bringt...

bei Antwort benachrichtigen
d-oli Lumens77 „SQL-Befehl“
Optionen

Hi

Schon rausgefunden? Ansonsten probier mal das:

SELECT F.fach
     , D1.name
     , D2.name
     , D3.name
     , D4.name
   FROM
   (
      (
         (
            fach AS F
            JOIN dozent1 AS D1
              ON F.dozent1 = D1.id
         )
         JOIN dozent2 AS D2
           ON F.dozent2 = D2.id
      )
      JOIN dozent3 AS D3
        ON F.dozent3 = D3.id
   )
   JOIN dozent4 AS D4
    ON F.dozent4 = D4.id
;

Je nach RDBMS kannst oder musst du 'AS' weglassen.
Wie Borlander bereits gesagt hat: Ein Join reicht nicht aus ...

Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Lumens77 Nachtrag zu: „SQL-Befehl“
Optionen

Hallo,

danke euch allen. Hab es jetzt. :-)
d-oli's Vorschlag hat mir den entscheidenden Schupps gegeben.

So sieht es jetzt aus:

select fach, p1.name dz1, p2.name dz2, p3.name dz3, p4.name dz4
from fach f LEFT JOIN dozent p1 ON f.dozent1 = p1.id
LEFT JOIN dozent p2 ON f.dozent2 = p2.id
LEFT JOIN dozent p3 ON f.dozent3 = p3.id
LEFT JOIN dozent p4 ON f.dozent4 = p4.id
where f.fach = 'mathe'

Danke nochmals.

Gruß,
Jürgen

bei Antwort benachrichtigen