Contraints in Abhängigkeit von Tabellenwerten

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.

Du könntest die Werte in einer temporären Tabelle zwischenspeichern. Näheres dazu kennt die INSERT und die SELECT Dokumentation.

Ein Beispiel:

SELECT ... INTO TEMPORARY TABLE meine_temp_tabelle WHERE ...[/quote]

Die Tabelle "meine_temp_tabelle" bleibt bis zum Ende der aktuellen Verbindung bestehen oder bis sie gelöscht wird. Gleichzeitig kann keine andere Verbindung die Daten in dieser Tabelle einsehen, zwei Abfragen kommen sich also nicht in die Quere.

Hast du so etwas gesucht?

Ah das funktioniert. Danke!

Freut mich :wink: