2016-03-24 14 views
0

Ich erhalte diesen Fehler, wenn ich versuche, eine gespeicherte Prozedur auszuführen.Gespeicherte Prozeduren Fehler unbekannte Spalte mySQL

mysql> call get_nearby; 

ERROR 1054 (42S22): Unknown column 'longRadius' in 'where clause'

Hier ist die SQL, um die gespeicherte Prozedur zu erstellen:

CREATE PROCEDURE get_nearby() BEGIN SET @lat = 10; set @long = 12; 
SELECT id, 
    @long - radius/abs(cos(radians(@lat)) * 69) as longRadius, 
    (radius/69) as latRadius 
FROM area 
WHERE longitude between @long + longRadius and @long - longRadius 
AND latitude between @lat + latRadius and @long - latRadius; 
END 

Ich habe keine Ahnung, warum der angegebene Spaltenname nicht erkannt wird. Im Moment habe ich @lat und @long am Anfang eingestellt, um das Testen zu vereinfachen.

Jede Hilfe würde sehr geschätzt werden.

+4

Sie können keine Spaltenaliasnamen in der where-Klausel verwenden. Siehe http://stackoverflow.com/a/942592/4843530. – AgapwIesu

+0

Tipp von heute: Verwenden Sie eine abgeleitete Tabelle! – jarlh

Antwort

2

Sie können keine Spaltenaliasnamen in der where-Klausel verwenden. Sie könnten diese where-Klausel in eine "have" -Klausel umwandeln, und dann können Sie die Aliase verwenden. Sie können weitere Informationen here und here erhalten.

Aus dem Mysql docs:

Standard-SQL nicht zulässt, Verweise auf Spaltenaliasnamen in einer WHERE-Klausel. Diese Einschränkung wird auferlegt, weil der Spaltenwert möglicherweise noch nicht ermittelt wurde, wenn die WHERE-Klausel ausgewertet wird.

Sie können die Berechnung auch entweder in der where-Klausel neu definieren oder eine Unterabfrage verwenden.

Verwandte Themen