以下查询
SELECT
LocationID,
a.Country,
ISO2,
Region1,
Region2,
Region3,
Area1,
a.City,
a.ZIP,
a.Lat,
a.Lng
FROM AWE_Locations a,
(SELECT PropVidID,
Latitude,
Longatude,
SQRT(POW(69.1 * (Latitude - a.Lat), 2) + POW(69.1 * (a.Lng - Longatude) * COS(Latitude / 57.3), 2)) AS Distance FROM AWE_Propvids c
)
as x
WHERE
a.ZIP LIKE '9021%' and
a.Country = 'US'
HAVING
x.Distance <= '100'
ORDER BY
a.Country,
Region1,
Region2,
a.city,
ISO2,
a.zip
ASC Limit 15
返回错误:
#1054 - Unknown column 'a.Lat' in 'field list'
为什么子查询在这种情况下不能使用父查询中的变量? 我尝试了各种组合试图解决这个问题,但到目前为止还没有运气。
答案 0 :(得分:0)
您应该考虑选择的以下部分,就像您要定义另一个表(您调用x
)一样:
(SELECT PropVidID,
Latitude,
Longatude,
SQRT(POW(69.1 * (Latitude - a.Lat), 2) + POW(69.1 * (a.Lng - Longatude) * COS(Latitude / 57.3), 2)) AS Distance FROM AWE_Propvids c
)
as x
定义此表时,应使用a.Lat
?
修复它的方法是运行“外部”查询,并在AWE_Propvids
上运行第二个查询时使用其结果。
它应该类似于:
SELECT
a.LocationID,
a.Country,
a.ISO2,
a.Region1,
a.Region2,
a.Region3,
a.Area1,
a.City,
a.ZIP,
a.Lat,
a.Lng,
SQRT(POW(69.1 * (Latitude - a.Lat), 2) + POW(69.1 * (a.Lng - Longatude) * COS(Latitude / 57.3), 2)) AS Distance
FROM AWE_Propvids c,
(SELECT
LocationID,
a.Country,
ISO2,
Region1,
Region2,
Region3,
Area1,
a.City,
a.ZIP,
a.Lat,
a.Lng
FROM AWE_Locations a
WHERE
a.ZIP LIKE '9021%' and
a.Country = 'US') as a
ORDER BY
a.Country,
a.Region1,
a.Region2,
a.city,
a.ISO2,
a.zip
ASC Limit 15
答案 1 :(得分:0)
问:为什么子查询在这种情况下不能使用父查询中的变量?
答:因为该子查询是内联视图。 MySQL将运行该查询并创建一个临时表,即&#34;派生表&#34; (正如MySQL所称)是外部查询的行源。内联视图查询必须在之前运行引用它的查询。
相关子查询可以在WHERE子句,HAVING子句,IN子句或SELECT列表中使用,但在FROM子句中它不是有效的,作为内联视图查询。