Termine mit Beteiligten - Lösungsvorschläge?

17/02/2011 - 09:24 von Burkhard Schneider | Report spam
Hallo zusammen,

Ich arbeite an einer Terminverwaltung. Die Termine stehen mit Datum/Uhrzeit,
Anlass, etc. in einer Tabelle. Zu jedem Termin gibt es x beteiligte
Personen.

Ziel ist es, eine Abfrage durchführen zu können in der Art:
Bei welchen Terminen sind die Personen A, B und D beteiligt?

Ich könnte mir eine zusàtzliche Tabelle der Beteiligten vorstellen mit den
Feldern TerminID und PersonID. Dann weiß ich aber nicht, wie die SQL-Syntax
aussehen müsste, die mir _einen_ Termin-Datensatz zurückliefert, wenn ich
frage: An welchen Terminen sind A, B und D beteiligt.

Alternativ könnte ich die Beteiligten in einem Memo-Feld in der
Termin-Tabelle speichern, z.B. durch , getrennt. Dann könnte ich so etwas
schreiben:

Select *
From Termine
Where (Beteiligte Like %A,%) or
(Beteiligte Like %B,%) or
(Beteiligte Like %D,%)

Das erscheint mir aber auch nicht besonders elegant.

Hat jemand vielleicht noch andere Ideen??

DBISAM, D2007

Gruß
Burkhard Schneider
 

Lesen sie die antworten

#1 André Schreiter
17/02/2011 - 11:44 | Warnen spam
Am 17.02.2011 09:24, schrieb Burkhard Schneider:
Ich könnte mir eine zusàtzliche Tabelle der Beteiligten vorstellen mit den
Feldern TerminID und PersonID. Dann weiß ich aber nicht, wie die SQL-Syntax
aussehen müsste, die mir _einen_ Termin-Datensatz zurückliefert, wenn ich
frage: An welchen Terminen sind A, B und D beteiligt.



Vermutlich geht es noch eleganter, aber mal ein auf die schnelle
gebasteltes Beispiel (Statt EXISTS kann man auch etwas mit IN basteln,
je nach dem was die Datenbank unterstützt):

SELECT *
FROM Termine t
WHERE EXISTS (
SELECT *
FROM TerminBeteiligte tb
WHERE t.TerminId = tb.TerminId
AND tb.PersonId = 1)
AND EXISTS (
SELECT *
FROM TerminBeteiligte tb
WHERE t.TerminId = tb.TerminId
AND tb.PersonId = 2)
AND EXISTS (
SELECT *
FROM TerminBeteiligte tb
WHERE t.TerminId = tb.TerminId
AND tb.PersonId = 3)

Mit Sicherheit dürfte es unabhàngig von der Eleganz aber schneller sein,
als eine "Volltextsuche" über ein Memofeld.

cu André

Ähnliche fragen