Einzelnen Beitrag anzeigen

EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#1

Komplizierte SQL-Abfrage

  Alt 10. Jul 2020, 08:36
Datenbank: SQL-Server • Version: alle • Zugriff über: Devart
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.

Geändert von EmWieMichael (10. Jul 2020 um 09:06 Uhr) Grund: Beispieldaten angefügt
  Mit Zitat antworten Zitat