Abfrage nach "nicht enthaltenen" Datensätzen

zesena

Neuer Benutzer
Beiträge
2
Hallo Leute,

bin neu im Forum. Bin durch die Suchfunktion nicht fündig geworden.

Ich mache eine SQL-Abfrage, die mir bestimmte Ergebnisse liefert (aktuell vorliegende Bescheinigungen eines Kunden nach bestimmten Kriterien).

In einer anderen Tabelle habe ich alle Bescheinigungen, die wir anfordern.

Jetzt möchte ich gerne sehen, welche Bescheinigungen noch nicht vorliegen.
Also alle Bescheinigungen aus der Beischeinigungstabelle minus die Bescheinigungen, die ich durch die erste Abfrage erhalte :)

Bestimmt ganz einfach aber irgendwie komme ich nicht darauf :(
Kann mir jemanden einen Tipp geben. Dachte ich könnte dies einfach durch einen join lösen, funzt aber nicht richtig.

Vielen Dank schonmal!
 
Werbung:
Mit PostgreSQL gemacht, vielleicht kann Oracle dies auch.

Code:
test=*# select * from bescheinigungen ;
 id
----
  1
  2
  3
  4
(4 Zeilen)

test=*# select * from kunden;
 kunde | bescheinigung
-------+---------------
  1 |  1
  1 |  3
  1 |  4
  2 |  2
  2 |  4
(5 Zeilen)
test=*# create extension intarray;
CREATE EXTENSION
test=*# with tmp as (select kunde, array_agg(bescheinigung) ist,(select array_Agg(id) soll from bescheinigungen) from kunden group by kunde order by kunde) select kunde, ist, soll, soll-ist as fehlt from tmp;
 kunde |  ist  |  soll  | fehlt
-------+---------+-----------+-------
  1 | {1,3,4} | {1,2,3,4} | {2}
  2 | {2,4}  | {1,2,3,4} | {1,3}
(2 Zeilen)
 
Oder einfach:
Code:
SELECT * FROM bescheinigung_benoetigt
EXCEPT
SELECT * FROM bescheinigung_vorhanden
Das setzt natürlich voraus, das für die benötigten Bescheinigungen schon irgendwo Einträge existieren die man verwenden kann und muss an die Tabellen angepasst werden.
 
Werbung:
Hallo Leute,
Danke für die Antworten. Werde die am Montag auf der Arbeit nochmal testen.
Ich hatte dies jetztdoch hinbekomm und zwar in dem ich die erste Abfrage ( nach den vorhandenen Bescheinigungen) als ein sub-select in der Abfrage der nicht vorhanden Bescheinigungen in einer not in funktion eingebe.

Code:
Select id from bescheinigung
Where id not in ( select id from vorhandeneBescheinigungen)

Vielen Dank nochmal
 
Zurück
Oben