Hallo,
Ich habe eine prinzipielle Frage zu SELECT Abfragen.
Sei folgende Tabelle ‘test’ gegeben:
a|b|c
t|7|10
t|6|9
f|1|2
f|3|8
f|9|22
Nun erstmal in Worten, was ich von der Abfrage will:
In den ersten beiden Zeilen (a=t) habe ich eine Reihe von Werten (6,7,9,10), deren Minalwert 6 und Maximalwert 10 ist. Aus den darauffolgenden Zeilen (a=f) möchte ich nun diejenigen, deren a-Wert oder b-Wert im Intervall zwischen 6 und 10 liegt.
Eine SQL Abfrage des Minimal (und analog Maximalwerts) würde erstmal so aussehen:
SELECT MIN(LEAST(b, c)) FROM test WHERE a = t;
Die Auswahl in Abhängigkeit des obigen Intervalls:
SELECT a, b FROM test WHERE b >= 6 AND b <= 10 OR c >= 6 AND c <= 10;
Was ich nun erreichen möchte:
Lässt sich soetwas in einer Abfrage ohne Subselects realisieren. Die Anzahl der Subselects wäre je nach realem Fall recht hoch und ich denke das drückt ganz schön auf die Performance.
Gibt es in Postgres eine Möglichkeit Werte zwischenzuspeichern, so dass ich die Abfrage in etwa folgendermaßen gestalten kann:
SELECT MIN(LEAST(b, c)) FROM test WHERE a = t;
SAVE FETCH INTO l, h; // Fantasiebefehl!!!
SELECT a, b FROM test WHERE b >= l AND b <= h OR c >= l AND c <= h;
Vielen Dank im Vorraus.