Vergleich mit mehreren Datensätzen

MelBib

Grünschnabel
Hallo,
ich stehe gerade glaube ich auf der Leitung und komme auf etwas sehr einfaches nicht...

Die Situation:
Eine Tabelle Exemplar. Verschiedene (buch)Exemplare können diesselbe Mediennummer haben.
Eine Tabelle Bestellung. Diese kann über die Mediennummer mit der Tabelle Exemplar verknüpft werden.

Ich möchte nun alle Bücher herausfinden, bei denen der Preis in der Bestellung vom Preis im Exemplarsatz differiert. Das Problem ist aber nun, dass die verschiedenen Exemplare unterschiedlich viel gekostet haben können.

Meine Abfrage soll also folgendes leisten:
Gib mir alle Datensätze, bei denen der Preis im Bestellsatz anders ist als in jedem der Exemplarsätze mit dieser Mediennummer . Und genau da hapert es...

Mein Code war bisher:
select buchungsnr, hstkurz, ex.preis, be.preis,bestelldatum, bearbeiter
from exemplar ex, bestellexemp be
where ex.mediennrex=be.mediennr
and be.preis!=ex.preis
and bestelldatum>='01-JAN-2002'
order by bearbeiter, bestelldatum

So liefert er mir aber eben auch die Daten, bei denen "eines der Exemplare" anders ist als die Bestellung. Ich will aber nur, bei denen der Rechnungspreis in keinem Exemplar auftaucht.

Ich hatte angedacht sowas wie
where be.preis not in (select ex.preis...where...
aber wie mache ich das?

Für Hilfe wäre ich sehr dankbar!

Lieben Gruß
Mel
 
Sorry, ich muss nochmal nachfragen...
Wenn ich einen Subquery mit ALL einfüge, dann vergleicht er doch aber mit ALLEN Exemplarsätzen und nicht nur mit denen mit der gleichen Mediennummer, oder?

Also so wäre mein Code:
select buchungsnr, hstkurz, ex.preis, be.preis,bestelldatum, bearbeiter
from exemplar ex, bestellexemp be
where ex.mediennrex=be.mediennr
and be.preis!= all (select preis from exemplar)
and bestelldatum>='01-JAN-2002'
order by bearbeiter, bestelldatum

Aber dann würde ich doch nur Datensätze bekommen, die in der Bestellung einen anderen Preis haben als "irgendeines" der Medien im Exemplarsatz, oder?
 
Du kannst auch im Subquery das Ergebnis mit WHERE einschränken.
Dabei kannst Du auch auf die Tabelle (ggf. mit Aliasnamen) aus dem äußeren Query zugreifen. Wenn Du auf ein Feld aus einer Tabelle des äußeren Querys zugreifst (und mit dem Wert der Tabelle des Subquerys vergleichst), wird aus dem äußeren Query der "richtige" Datensatz zum Vergleich genommen.
So ganz steige ich durch Dein Query nicht durch, aber das Subquery könnte evtl. so aussehen:
Code:
select preis from exemplar ex2 where ex2.mediennrex=ex.mediennrex
Gruß hpvw

PS: Bitte nutze die Code Tags, [ php ]code[ /php ] für PHP-Quelltexte, [ html ]code[ /html ] für HTML-Quelltexte und [ code ]code[ /code ] für sonstige Quelltexte, natürlich ohne die Leerzeichen. Das macht die Quelltexte übersichtlicher. Für kurze Code-Teile im Fließtext (z.B. Variablen- oder Funktionsnamen) kannst Du [ mono ]kurzer Code-Fetzen[ /mono ] verwenden.
 
Zurück