Seite 1 von 1

Tabelle verweist auf sich selbst

Verfasst: Mi 28. Jan 2015, 22:27
von Dami
Ich habe eine Personentabelle, in der ebenfalls Kontaktpersonen (die ID's) abgelegt werden.

TabellePerson:
ID
...BlaBla
Telefon
eMail
ID_KontaktPerson1
ID_KontaktPerson2

Die ID_KontaktPerson... ist die ID der Person in TabellePerson (also auf sich selbst).
In einem Unterformular möchte ich ein paar Daten der KontaktPerson Anzeigen
(eMail, Telefon).
Hier Komme ich nicht weiter :?:

Eine Verknüpfung der ID <-> ID_KontaktPerson funktioniert nicht
Quasi ein:
SELECT "Telefon", "Mail" FROM "Person"
WHERE "ID" = (SELECT "ID_KontaktPerson" FROM "Person")

Es müsste doch funktionieren, nur wie ?

Re: Tabelle verweist auf sich selbst

Verfasst: Do 29. Jan 2015, 09:24
von Freischreiber
Hallo Dami,

wenn ich den Begriff "relationale Datenbank" richtig verstehe, besteht sie aus Tabellen. Jede Zeile einer Tabelle ist ein "Tupel" oder Datensatz. https://de.wikipedia.org/wiki/Tupel_%28Informatik%29

Jedes Tupel beschreibt eine bestimmte Relation verschiedener Grundmengen: Die Person mit der ID 1 hat genau die Telefonnummer 12345 und genau die Mailadresse abc.

Die Beziehung zu einer anderen Person ist keine Eigenschaft einer Person.

Deine Personen sind wahrscheinlich aus einem bestimmten Grund mit anderen Personen verbunden, etwa für ein Projekt.

Du kannst also z. B. eine zweite Tabelle "t-Projekte" einführen, Spalte 1: Projektnummer, Spalte 2: Mitglied-ID. Wenn drei Personen an demselben Projekt arbeiten, hätte diese Tabelle dann drei Zeilen mit derselben Projektnummer.

Also besser: zusätzlich eine dritte Tabelle, als Zwischentabelle, die speichert, welche Personen und welche Projekte zusammengehören.
Ein Beispiel findest du hier: http://www.libreoffice-forum.de/viewtop ... 10&t=14414

Gruß
Freischreiber

Re: Tabelle verweist auf sich selbst

Verfasst: Do 29. Jan 2015, 11:04
von pmoegenb
Dami hat geschrieben:SELECT "Telefon", "Mail" FROM "Person"
WHERE "ID" = (SELECT "ID_KontaktPerson" FROM "Person")
Wenn Deine Auflistung der Feldnamen richtig ist, hast Du kein Feld mit dem Namen ID_KontaktPerson sondern ID_KontaktPerson1 und ID_KontaktPerson2. Außerdem fehlt die Definition ob die Felder der Unterabfrage selektiert werden sollen.

Probiere es mal mit:

Code: Alles auswählen

SELECT "b.Telefon" AS Telefon, "b.Mail" AS Mail FROM "Person" a
LEFT JOIN "Person" b
ON "a.ID"  = "b.ID_KontaktPerson1"
UNION
SELECT "b.Telefon" AS Telefon, "b.Mail" AS Mail FROM "Person" a
LEFT JOIN "Person" b
ON "a.ID"  = "b.ID_KontaktPerson2"