1

正常に機能する既存の検索があります。テーブル 1 (Clubs) を検索していますが、テーブル 2 (Towns) からデータを取得する必要があります。これを行うには、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' in 'field list'

それ以前は、内部選択と外部選択の両方で使用される緯度と経度のフィールドに反対していました。

4

2 に答える 2

0
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 を使用する必要があります

于 2013-10-24T10:51:13.797 に答える