Mehrere Spalten der Haupt-Tabelle beziehen sich auf den gleichen Primärschlüssel

Zu dem Dienstplan-Projekt, wegen dem ich schon zwei Fragen gestellt hatte. Hier noch eine für mich unüberwindliche Sache.

Das wichtigste Formular wird ausgefüllt von Abfrage1 (wird später einen schlaueren Namen bekommen). Im Formular kann die Haupt-Tabelle „Dienst-Planung“ gefiltert werden und zwar nach “EintragsTag”.“EintragsTag” (Tabelle vorgefertigter Tage, nämlich derjenigen Tage, die von Belang sind) und nach Mitarbeitern (um sehen zu können, wer an welchem Tag schon verplant ist).

Wie auch in meiner vorigen Frage dargestellt, könnte jeder Mitarbeiter am Tag „x“ an maximal drei Orten Dienst haben. Daher sind in der Haupt-Tabelle „Dienst-Planung“ u.a. die Spalten Ort1, Ort2, Ort3.

Meine Frage bezieht sich auf die „Abfrage1“:

Der erste Ansatz funktioniert, zeigt aber nur einen Ort

SELECT "Dienst-Planung"."dienstID", "EintragsTag"."EintragsTag", "Mitarbeiter"."MitarbeiterVornamen", "Orte"."OrteName" FROM "Dienst-Planung", "Mitarbeiter", "Orte", "EintragsTag" WHERE "Dienst-Planung"."dienstMitarbeiter" = "Mitarbeiter"."MitarbeiterId" AND "Dienst-Planung"."dienstOrt1" = "Orte"."OrteId" AND "Dienst-Planung"."dienstTag" = "EintragsTag"."DatumID"

Wenn ich nun AND "Dienst-Planung"."dienstOrt2" = "Orte"."OrteId" hinzufüge, wird mir überhaupt nichts mehr angezeigt

SELECT "Dienst-Planung"."dienstID", "EintragsTag"."EintragsTag", "Mitarbeiter"."MitarbeiterVornamen", "Orte"."OrteName" FROM "Dienst-Planung", "Mitarbeiter", "Orte", "EintragsTag" WHERE "Dienst-Planung"."dienstMitarbeiter" = "Mitarbeiter"."MitarbeiterId" AND "Dienst-Planung"."dienstOrt1" = "Orte"."OrteId" AND "Dienst-Planung"."dienstOrt2" = "Orte"."OrteId" AND "Dienst-Planung"."dienstTag" = "EintragsTag"."DatumID"

Daraus ergibt sich die konkrete Frage:
Ich habe drei Spalten (Ort1, Ort2, Ort3), die wie alles in der Haupt-Tabelle „integer“-Werte beinhalten. Jeder der drei Orte bezieht sich ja auf die knapp zwanzig Orte in der Orte-Tabelle, und zwar auf die gleichen. Während der Planung will man ja nun nicht Ziffern lesen, sondern die Namen der Orte.
Wie sage ich dem guten Base, daß er mir alle drei Male die Ortsnamen darstellen muß?

Müßte ich vielleicht drei (identische) Tabellen mit Orten kreieren?

Wie auch in meiner vorigen Frage dargestellt, …

Bitte trage den Link deiner vorigen Frage hier ein. Dazu editiere deine Eingangsfrage.

Schreibe keine Antwort, wenn es nicht eine Lösung zu deiner Frage ist.

gemacht! Vielen Dank!

Die Bedingung

... AND "Dienst-Planung"."dienstOrt2" = "Orte"."OrteId" ...

zeigt nur dann Inhalt in der Abfrage, wenn “dienstOrt2” auch einen Inhalt hat, also nicht NULL ist.

Vermutlich löst die folgende Konstruktion das Problem:

FROM "Dienst-Planung", "Mitarbeiter", "Orte" AS "O1", "Orte" AS "O2", "Orte" AS "O3", 
"EintragsTag" ...

weiteres siehe unten

Irgendwie funktioniert es leider trotzdem nicht …

Ja, ich habe da nicht die dreifache Tabelle mit drin:

FROM "Dienst-Planung", "Mitarbeiter", "Orte", "EintragsTag" ...

muss erweitert werden zu

FROM "Dienst-Planung", "Mitarbeiter", "Orte" AS "O1", "Orte" AS "O2", "Orte" AS "O3", "EintragsTag" ...

Damit kannst Du dann

... AND "Dienst-Planung"."dienstOrt2" = "O2"."OrteId" ...

stehen lassen und statt

... "Orte"."OrteName"

so etwas wie

... "O1"."OrteName" AS "Ort1", "O2"."OrteName" AS "Ort2", "O3"."OrteName" AS "Ort3" ...

einfügen.

Besser bei bestimmten Problemen ist immer eine kleine Beispieldatei - gerade in Base …

Bin noch nicht dazu gekommen …habe noch eine andere Lösung versucht, aber bin auch gescheitert. Diesen hier von Dir vorgestellten Vorschlag werde ich ausprobieren (frühestens morgen). Vielen Dank schon mal!!

Hab mal

[hier](http://s000.tinyupload.com/index.php?file_id=07746979162706645895)

das Projekt raufgeladen.

Falls Du noch da bist, RobertG, hier habe ich Deine Vorschläge zwar noch nicht eingebunden (mit nicht geringer Mühe habe ich alles nochmals von vorne gemacht, mit fiktiven Daten, Namen, etc.), aber es ist jetzt sichtbarer, um was es sich dreht. Unten: Filterung Mitarbeiter, Datum. In der rechten Bildschirm-Hälfte käme dann eine Übersichts-Tabelle, um zu kontrollieren, welche Orte an den betreffenden Tagen noch nicht zugeteilt worden sind.

Hallo Anselmo,

die korrekte Abfrage muss wohl so lauten:

SELECT "Dienstplan-Eintrag"."dienstplanID", "Dienstplan-Eintrag"."dienstplanTag",  
"Mitarbeiter"."MitarbeiterNachnamen", "Mitarbeiter"."MitarbeiterVornamen", "Mitarbeiter"."MAbkrzung", 
"Orte1"."OrtName" AS "Ort1", "Orte2"."OrtName" AS "Ort2", "Orte3"."OrtName" AS "Ort3" FROM 
"Dienstplan-Eintrag" LEFT JOIN "Mitarbeiter" ON "Dienstplan-Eintrag"."dienstplanMitarbeiter" = 
"Mitarbeiter"."MitarbeiterId" LEFT JOIN "Orte" AS "Orte1" ON "Dienstplan-Eintrag"."dienstplanOrt1" = 
"Orte1"."OrtId" LEFT JOIN "Orte" AS "Orte2" ON "Dienstplan-Eintrag"."dienstplanOrt2" = 
"Orte2"."OrtId" LEFT JOIN "Orte" AS "Orte3" ON "Dienstplan-Eintrag"."dienstplanOrt3" = 
"Orte3"."OrtId"

Das verstehen allerdings nur noch Leute, die die geänderte DB gesehen haben. Du hast bei einer normalen Abfrage ohne LEFT JOIN das Problem, dass Ort3 nicht existiert - und deshalb nichts angezeigt wird.

Kontaktiere mich per privater Mail.

Funktioniert! Super! Gerne frage ich das weitere per Email (z.B. mit dem Filtern, oder die ganze Tabelle “umsetzen”, um auf die von mir erwähnte Weise die noch nicht verplanten Orte sichtbar zu machen).
Ich kann aber keine Email-Adresse finden auf Deinem Profil

Schau einfach unter meiner Homepage im Impressum nach. Ich muss einmal schauen, ob ich die Adresse auch auf dem Profil hier hinterlege.