[英]MySql Nested Select and inner join
我有一個有效的現有搜索。 它正在搜索表1(俱樂部),但需要從表2(鎮)中獲取一些數據。 為此,它執行兩個表的INNER JOIN。
我現在試圖將結果限制為距特定點一定距離內的結果。
這兩個表都具有稱為緯度和經度的字段,但是僅填充了Towns值,因此我需要在搜索中使用這些值。
其他兩個表在兩個表中使用相同的名稱,因此我必須指出我指的是哪個表(例如Towns.town_key)。
為了進行距離搜索,我正在內部嵌套中進行粗略的方盒搜索,然后在外部嵌套中執行關於結果的畢達哥拉斯公式。 (我不需要Haversine的准確性。)
不管我嘗試什么,我總是在表名放在最前面的字段上出錯。 不幸的是,盡管閱讀了很多書,但我還是不完全理解別名等的用法。
這是我的搜索:
SELECT club_key, name, Towns.town_key, town_name, Clubs.address,
sqrt(((-32.380100 - Towns.latitude)*111.133)^2 + ((147.481400 -
Towns.longitude)*93.853)^2) AS dist FROM
(SELECT club_key, name, Towns.town_key, town_name, Clubs.address FROM Clubs
INNER JOIN Towns ON Clubs.town_key = Towns.town_key WHERE type = 'football'
AND Towns.latitude BETWEEN -32.829761 AND -31.930439 AND Towns.longitude BETWEEN 146.948951 AND 148.013849) AS T1
WHERE dist < 50 ORDER BY 6,2
最新的錯誤是:無法運行查詢:“字段列表”中的未知列“ Towns.town_key”
在此之前,它反對內部和外部選擇中都使用的緯度和經度字段。
這里的問題是別名的范圍。 試試看:
SELECT T1.club_key, T1.name, T1.town_key, T1.town_name, T1.address,T1.dist
FROM
(
SELECT
sqrt(((-32.380100 - Towns.latitude)*111.133)^2 + ((147.481400 -
Towns.longitude)*93.853)^2) AS dist,
club_key, name, Towns.town_key, town_name, Clubs.address
FROM Clubs
INNER JOIN Towns ON Clubs.town_key = Towns.town_key
WHERE type = 'football'
AND Towns.latitude BETWEEN -32.829761 AND -31.930439
AND Towns.longitude BETWEEN 146.948951 AND 148.013849
) AS T1
WHERE T1.dist < 50 ORDER BY 6,2
您正在嘗試在嵌套選擇(即Towns
之外使用別名,該別名引用嵌套選擇(即Towns
表)中的表。 您可以使用T1
別名解決此問題。
SELECT
T1.club_key,
T1.name,
T1.town_key,
T1.town_name,
T1.address,
sqrt(((-32.380100 - T1.latitude)*111.133)^2 + ((147.481400 - T1.longitude)*93.853)^2) AS dist
FROM
(
SELECT
Towns.latitude,
Towns.longitude,
club_key,
name,
Towns.town_key,
town_name,
Clubs.address
FROM Clubs
INNER JOIN Towns ON Clubs.town_key = Towns.town_key
WHERE
type = 'football'
AND Towns.latitude BETWEEN -32.829761 AND -31.930439
AND Towns.longitude BETWEEN 146.948951 AND 148.013849
) AS T1
HAVING dist < 50
ORDER BY 6,2
在上一個答案中,我認為WHERE將無法使用,因為您必須使用HAVING
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.