2017-11-23 3 views
0

Ich versuche Ergebnis der Funktionsausführung in where Klausel zu verwenden, aber ohne Erfolg:Mit der Funktion Ergebnis in WHERE-Klausel in PostgreSQL

SELECT clinics.*, distance_between_objects(1, id, 7, 3) AS dist FROM clinics WHERE dist<=1; 

gibt mir: Column "dist" does not exists. Zitiert es mag:

SELECT clinics.*, distance_between_objects(1, id, 7, 3) AS dist FROM clinics WHERE "dist"<=1; 

hilft entweder nicht. Bitte beachten Sie, gibt es in Postgres die Möglichkeit, das Funktionsergebnis in der WHERE-Klausel zu verwenden, ohne es zweimal aufzurufen? Danke!

+0

WHERE kann keine Werte verwenden, die auf der gleichen Ebene von select berechnet wurden, da sie ausgewertet werden, bevor Sie Werte erhalten. Auf der anderen Seite ORDER BY kann, weil es ausgewertet wird, nachdem alle Werte ausgewählt sind. Aber kapseln Sie Funktion in Subselect in FROM-Klausel und es wird funktionieren. – JosMac

Antwort

0

zu vermeiden Um distance_between_objects zweimal anrufen:

--Subquery 
SELECT * FROM (
    SELECT 
     *, 
     distance_between_objects(1, id, 7, 3) AS dist 
    FROM 
     clinics) AS clinics_dist 
WHERE 
    dist <= 1; 

--CTE 
WITH clinics_dist AS (
    SELECT 
     *, 
     distance_between_objects(1, id, 7, 3) AS dist 
    FROM 
     clinics 
) 
SELECT 
    * 
FROM 
    clinics_dist 
WHERE 
    dist <= 1; 

Persönlich bevorzuge ich CTE Ansatz.

0

können Sie die Funktion in der Klausel, wo verwenden:

SELECT clinics.*, distance_between_objects(1, id, 7, 3) AS dist 
FROM clinics 
WHERE distance_between_objects(1, id, 7, 3)<=1; 
+0

Das Ziel besteht nicht darin, die Funktion zweimal aufzurufen. Wie in Michel.Milezzi Antwort oben. –

Verwandte Themen