2016-04-23 7 views
0

Was ist falsch an diesem Code?Fehler "Ungültiger Spaltenname" in SQL

ich diesen Fehler:

Invalid column name 'Distance'

Code:

SELECT 
    Company.CompanyId as Id, 
    (6371 * acos(cos(radians(47.8423155)) * cos(radians(Company.Latitude )) * cos(radians(Company.Longitude ) - radians(35.232933)) + sin(radians(47.8423155)) * sin(radians(Company.Latitude)))) AS Distance 
FROM 
    Company 
INNER JOIN 
    Product ON Company.CompanyId = Product.CompanyId 
WHERE 
    Distance< 5000 
ORDER BY 
    Distance 
+0

SQL Server sicher – user5740086

+0

Mögliche Duplikat [SQL Alias ​​gibt ungültige Spaltenname] (http://stackoverflow.com/questions/8243283/sql-alias-gives-invalid-column-name) –

Antwort

0

Wickeln Sie die Auswahl innerhalb subselect

select * from(SELECT 
    Company.CompanyId as Id, 
    (6371 * acos(cos(radians(47.8423155)) * cos(radians(Company.Latitude )) * cos(radians(Company.Longitude ) - radians(35.232933)) + sin(radians(47.8423155)) * sin(radians(Company.Latitude)))) AS Distance 
FROM 
    Company 
INNER JOIN 
    Product ON (Company.CompanyId = Product.CompanyId) 
) AS P 
WHERE 
    P.Distance< 5000 
ORDER BY 
    P.Distance; 

Die innere Unterabfrage die Funktion auf Basis gibt, von denen Sie mit dem Alias ​​Entfernung filtern.

+0

es scheint, dass Sie Recht haben, aber ich habe einen Fehler:" Falsche Syntax in der Nähe des Schlüsselwortes 'WHERE'. " – user5740086

+0

Vielleicht falsche Paranthesis. Warten. Jetzt ausprobieren –

+0

der Fehler ist der gleiche – user5740086

1

auf dem Je Sie verwenden, einige RDBMS nicht erlauben, zu Spalte Aliase Bezugnahme auf die in den where und order by Spalten . Verwenden Sie einfach die tatsächlichen Spaltennamen:

SELECT  Company.CompanyId as Id, 
      Company.VisitCount AS myVisitCount 
FROM  Company 
INNER JOIN Product ON Company.CompanyId = Product.CompanyId 
WHERE  Company.VisitCount < 5000 
ORDER BY Company.VisitCount 
+0

Sie haben Recht, aber Ich habe meine Frage aktualisiert, schau dir diese Entfernung an, bitte: | – user5740086

+0

@ user57000086 das gleiche Prinzip gilt immer noch – Mureinik

+0

Ich möchte Entfernung zurück, so dass Sie sagen, "(6371 ........)" bei beiden wählen und wo, ist das normalerweise? – user5740086

Verwandte Themen