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)