私は候補とcandidate_location
の2つのテーブルを持っています。 candidate_location
テーブルは、type
フィールドに応じて、他の3つのテーブルのいずれかからマップ座標を取得します。その結果、エイリアスはlat
とlng
です。これは、距離のあるIF文の後にクエリーの部分で使用する必要があります。距離計算にエイリアスを使用する
距離計算の部分に「lat」や「lng」の列が見つからないというエラーが表示されています。エイリアスであるためです。どのように私は計算で認識されるようにこれを再構成することができますか?あなたがそれらを使っている同じクエリで別名を定義している
SELECT candidate.CandID,
IF (candidate_location.type = 1, p.latitude, IF (candidate_location.type = 2, a.latitude, pr.latitude)) AS lat,
IF (candidate_location.type = 1, p.longitude, IF (candidate_location.type = 2, a.longitude, pr.longitude)) AS lng,
IF (candidate_location.type = 2, a.standard_deviation,null) as standard_deviation,
(3959 * acos(cos(radians(51.41019)) * cos(radians(lat))
* cos(radians(lng) - radians(0.07222)) + sin(radians(51.41019))
* sin(radians(lat)))) AS distance
FROM candidate_location
LEFT JOIN geo_postcodes AS p ON (candidate_location.type = 1 AND candidate_location.postal_id = p.id)
LEFT JOIN geo_area_averages AS a ON (candidate_location.type = 2 AND candidate_location.postal_id = a.id)
LEFT JOIN geo_probability AS pr ON (candidate_location.type = 3 AND candidate_location.postal_id = pr.id)
LEFT JOIN candidate ON candidate_location.candid=candidate.CandID
@dlofrodloh、私はLat参照の1つを見逃しました...リビジョンを確認してください。 – DRapp
この回答をお寄せいただきありがとうございます。私はこれまでにこの方法を使用していませんでした。それは非常に有用であることが証明されました。また、他の有効なソリューション – dlofrodloh