Select Anfrage IN-Operator (Hausaufgabe) Bitte um Hilfe

bennot

Mitglied
Hallo,

es existieren folgende Tabellen:

Sportler (SNR, Name, Wohnort)
Praxis (PNR, Name, Praxissanschrift)
Rechnung (RNR, PNR, SNR, Leistung, Betrag)


Aufgabe:
Gesucht sind die PNR der Praxen, von denen keine Gebühr einen Gesamtbetrag von 100€ unterschreitet
- es werden mehrere Rechnungen von Praxen an Sportler gestellt (unterschiedliche Leistungen mit unterschiedlichen Beträgen)

a) IN Operator
b) Any, All Operator


Meine Lösung:

Select Distinct
Praxis.PNR

From
Praxis, Rechnung

Where
Rechnung.Betrag IN

(Select
PNR

From
Rechnung

Where
Betrag < 100)



Problem:

in meiner Tabelle Rechnung hat zB. die Praxis mit PNR 1 mehere Rechnungen unter und über 100€ ausgestellt.
Laut meiner Lösung wird die Praxis aufgelistet, da sie ja eine Rechnung unter 100€ ausgestellt hat

Frage:
wie hole ich mir erst einmal die Praxen raus die NIE eine Rechnung über 100€ ausgestellt haben?


Vielen Dank.
 
Du musst die nicht erwünschten ermitteln und mit NOT IN ausfiltern
SQL:
Select
	r1.PNR
FROM
	rechnung AS r1
WHERE
	r1.PNR NOT IN(
		Select Distinct
			r2.PNR
		From
			Rechnung AS r2
		Where
			r2.betrag > 100 )
 
Zuletzt bearbeitet von einem Moderator:
Deine Lösung ist syntaktisch richtig (SQL sagt keine Fehler), aber das Ergebnis ist nicht Richtig :(

Hier meine Lösung in der ich mich nur auf die Tabelle Rechnung beziehe, da diese ja eindeutige Referenzen auf die PNR der Praxen hat.

Beziehe ich wie du die Praxis Tabelle mit ein stimmt das Ergebnis nicht ?!


Code:
SELECT Distinct
rechnung.PNR
FROM
Rechnung
WHERE
Rechnung.PNR NOT IN(
SELECT DISTINCT
rechnung.PNR
FROM
Rechnung 
WHERE
rechnung.betrag < 100 )

Lösung b) mit All, any

Code:
SELECT Distinct
rechnung.PNR
FROM
Rechnung
WHERE
Rechnung.PNR = All (
SELECT DISTINCT
rechnung.PNR
FROM
Rechnung 
WHERE
rechnung.betrag < 100 )


Seltsam hier ist, dass ein identisches Ergebnis bei != All sowie = All raus kommt...
 
Zurück