2011-03-24 48 views
1

我有以下查詢:SQL - 無效的列名

SELECT o.outcode AS lead_postcode, v.outcode AS venue_postcode, 6 * o.lat AS distance 
FROM venue_postcodes v, uk_postcodes o 
WHERE o.outcode = 'CF3' 
GROUP BY v.outcode 
HAVING SUM(distance)>100 
ORDER BY distance 

這個停止工作的時候我加入了部分GROUP BY v.outcode HAVING SUM(distance)>100

它說服務器無法處理請求。 --->無效的列名'距離'

任何想法爲什麼?

回答

2

只在查詢內定義爲「6 * o.lat」的「別名」距離不能在查詢中使用,但僅在此之後才能使用。

替代解決方案是

SELECT i.* 
FROM (
    SELECT o.outcode AS lead_postcode, v.outcode AS venue_postcode, 6 * o.lat AS distance 
    FROM venue_postcodes v, uk_postcodes o 
    WHERE o.outcode = 'CF3' 
) i 
GROUP BY i.outcode 
HAVING SUM(i.distance)>100 ORDER BY i.distance 
6

distance是列別名,您不能引用HAVING子句中的列別名。但是你可以在ORDER BY中使用別名。

嘗試改用:

HAVING SUM(6 * o.lat)>100 
ORDER BY distance 
0

使用ORDER BY 6 * o.lat。你不能使用子句AS作爲ORDER BY

+0

不完全正確......看到羅布麻的評論。 – Tom 2011-03-24 10:42:54

0

我相信你需要使用SUM(6 * o.lat),因爲不是每個數據庫服務器都可以在having子句中使用別名列(它與查詢計劃,解析等等。)。取決於你使用的數據庫。