Abfrage: Matching für alle Elemente einer Liste?

Hallo, ich hab ein Problem. ich versuche es mal mit vereinfachten Werten und Bezeichnungen darzustellen:

Es gibt eine Tabelle TABLE, die hat zwei Spalten: ID und SIZE

Ich habe eine Liste mit IDs (1, 2, 3, 4, 5), von denen ich gerne wissen würde, ob sie ALLE einer SIZE > 5 zugeordnet sind.

Mit SELECT * FROM table WHERE size > 5 AND id IN (1,2,3,4,5) bekomme 0 bis 5 Ergebniszeilen, die mir sagen, welche der IDs eine SIZE > 5 haben.
Damit weiß ich allerdings noch nicht, ob alle 5 dem Kriterium genügen.

Ich könnte es natürlich so formulieren: SELECT COUNT(*) FROM table WHERE size > 5 AND id IN (1,2,3,4,5) Danach kann ich überprüfen ob der zurückgegebene Wert der Anzahl meiner IDs in der Liste entspricht.

Das erscheint mir allerdings sehr unsauber. Gibt es einen besseren Weg, das zu erreichen?
Wie gesagt, das war die vereinfachte Darstellung. Falls es für die Lösung wichtig ist, hier ein paar Infos zum realen Umfeld:

  • Die Datenbank ist Oracle 9
  • Ich kann nicht sicherstellen, dass die Liste der IDs keine Duplikate enthält
  • Gleichzeitig kann es sein, dass das SELECT eine einzelne ID mehrfach zurückgibt (das ließe sich aber mit einem DISTINCT verhindern)
  • Die Liste ist im Schnitt 100 Elemente lang
  • Das Statement wird von einem Java-Code abgesetzt, den ich entwickle. Das Ergebnis muss also nicht menschenlesbar sein (die COUNT-Abfrage und den Vergleich mit der Listenlänge aus meinem Beispiel könnte der Java-Code z.B. prima bewerkstelligen)

Mist, hab ich doch glatt was vergessen:

Eine Möglichkeit wäre, festzulegen, dass ich nur die IDs der Liste betrachte und die WHERE-Clause negiere.
Auf die Art würde ich herausbekommen, welche IDs aus der Liste nicht dem Kriterium entsprechen.
Ein COUNT drumherum und ich könnte sagen „Wenn das Ergebnis > 0 ist, haben nicht IDs den Test bestanden“.
Das wäre besser, als gegen die Listenlänge zu prüfen.

Die Frage ist: Geht das? Nur die Elemente einer übergebenen Liste prüfen?

Danke und Gruß,
Cervantez

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Eine Möglichkeit wäre, festzulegen, dass ich nur die IDs der
Liste betrachte und die WHERE-Clause negiere.
gelöscht

Die Frage ist: Geht das? Nur die Elemente einer übergebenen
Liste prüfen?

Hallo Cervantez

die Idee ist nicht schlecht

SELECT count(id) 
 FROM test2 
 WHERE size 
funktioniert einwandfrei.

MfG Georg V.

Hi Georg,

Verdammt, ich hab den Wald vor lauter Bäumen nicht gesehen.
Danke :smile:

Gruß,
Cervantez

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]