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"