Nur relevante Nummern ausgeben

Hallo, ich habe ein Problem. Seit zwei Stunden tüftel ich rum und komm zu keinem Ergebnis. Ich brauche eine Oracle-Abfrage für folgendes Problem.
Ich habe eine Tabelle, in der es zu einer INVOICE_NO mehrere Versionen (SEQUENCE_NO) geben kann. Ich will mir nun alle INVOICE_NO anzeigen lassen, für die es in keiner ihrer Versionen einen Eintrag ‘P%’ im Feld USER_INITIAL gibt. Wie mache ich sowas?

Hier eine Beispieltabelle:
INVOICE_NOSEQUENCE_NOUSER_INITIAL96140431BOSS96140432BOSS96140433AUTOROUT96141901AUTOROUT96141902P12345696141903AUTOROUT96144881BOSS96144882AUTOROUT96144883AUTOROUT

Sehen so ORACLE-Tabellen aus? Schauder …

test=*# select distinct invoice from desktop except select invoice from desktop where sequence ~ 'fasel';
 invoice
---------
       2
(1 row)

test=*# select * from desktop ;
 invoice | sequence
---------+----------
       1 | bla
       1 | fasel
       1 | blub
       2 | bla
       2 | blub
(5 rows)

test=*# select distinct invoice from desktop except select invoice from desktop where sequence ~ 'fasel';
 invoice
---------
       2
(1 row)

falls ich deinen Wunsch richtig verstanden habe…


Andreas

Sorry, hier noch mal die Tabelle

INVOICE_NO | SEQUENCE_NO | USER_INITIAL
9614043 | 1 | BOSS
9614043 | 2 | BOSS
9614043 | 3 | AUTOROUT
9614190 | 1 | AUTOROUT
9614190 | 2 | P123456
9614190 | 3 | AUTOROUT
9614488 | 1 | BOSS
9614488 | 2 | AUTOROUT
9614488 | 3 | AUTOROUT

Hier sollten dann z.B. nur die beiden INVOICE_NO 9614043 und 9614488 ausgegeben werden.

Super! Danke!
Except gibt’s zwar bei Oracle nicht, das müsste MINUS sein, aber das Ergebnis sieht schon mal ganz gut aus, ich werde es jetzt noch sporadisch prüfen.

Nun ja, EXCEPT ist SQL-Spec.

Andreas

Und Oracle ist? … g

Zu Oracle’s Verteidung muss man wohl sagen, dass MINUS schon drin war bevor der Standard EXCEPT definiert hat.
EXCEPT ist glaube ich erst mit SQL92 reingekommen, MINUS gab es schon in Oracle 7 (also irgendwann Mitte/Ende der 80er)