Hallo
SQL-Spezis!
Obwohl ich bereits seit einiger Zeit mit
SQL arbeite, weiß ich für das nachfolgend beschriebene Problem nichteinmal ansatzweise eine Lösung.
Gegeben sind folgende Tabellen:
- PERSON
- EIGENSCHAFT
- AUFTRAG
Die Tabellen EIGENSCHAFT und AUFTRAG enthalten zu jedem Personensatz 0..n Sätze. Die logische Verbindung
wird über Nummernfelder realisiert: PERSON.NUM enthält einen einmaligen Integerwert, EIGENSCHAFT.PNUM und
AUFTRAG.PNUM erhalten PERSON.NUM und "zeigen" so auf den entsprechenden Personensatz.
Die Auftragstabelle enthält u. a. das Feld AUFTRAG.TYP (Integer) mit Werten zwischen 1 und 20.
So, nun zu meinem Problem:
Ich möchte sämtliche Personen selektieren, die
a) über mindestens eine Eigenschaft verfügen,
und (!)
b) entweder keine Auftragssätze besitzen,
oder (!)
eine beliebige Anzahl Auftragssätze besitzen, davon aber mindestens ein Satz, nicht vom Typ n ist.
Selbstredend ist es der b)-Teil der Abfrage, der meine Stirn in Falten legt. Lässt sich die
Abfrage überhaupt mit
SQL realisieren?
Ich bin für jeden Tipp dankbar!
Michael
EDIT
Ein Beispiel:
PERSON
NUM NAME
10 Müller
11 Meyer
12 Schmidt
13 Schulze
EIGENSCHAFT
PNUM WERT
10 Musiker
10 Handballer
11 Tänzer
12 Angler
12 Segler
AUFTRAG
PNUM TYP
10 5
10 8
11 5
13 8
13 9
Setze ich z. B. als Ausschlusskriterium AUFTRAG.TYP = 5 (b-Teil der Abfrage) ein, muss die
Abfrage zu folgendem Ergebnis führen:
10 Müller (er hat mindestens eine Eigenschaft, und einen Auftragssatz <> Typ 5)
12 Schmidt (er hat mindestens eine Eigenschaft, und keinen Auftragssatz)
Nicht im Seklektionsergebnis:
Meyer hat zwar eine Eigenschaft, aber nur Aufrtagssatz vom Typ 5.
Schulze hat zwar einen Auftragssatz <> Typ 5, aber keine Eigenschaft.