0

「#1052 - フィールド リストの列 'lat' があいまいです」というエラーをスローする、かなり長いクエリを使用しています。パーツに分割しましたが、各パーツは正常に動作しているように見えますが、一度に実行するとこのエラーが発生します。クエリは次のとおりです。

    SELECT lesson_requests_global_2.student_name,
           (3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lat)))) AS distance,
           lesson_requests_vendor.user_purchased
    FROM lesson_requests_global_2
    INNER JOIN
      ( SELECT student_name,
               MAX(request_date) AS max_request_date
       FROM lesson_requests_global_2
       WHERE ( 3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lat))) ) < 30
       GROUP BY student_name ) AS recent_student_lesson_request ON lesson_requests_global_2.student_name = recent_student_lesson_request.student_name
    AND lesson_requests_global_2.request_date = recent_student_lesson_request.max_request_date
    LEFT JOIN lesson_requests_vendor ON v.user_purchased = lesson_requests_global_2.student_name
    WHERE lesson_requests_vendor.user_purchased <> 'bob jones'
      AND distance < 30
    ORDER BY distance LIMIT 0 , 20

長い COS/RADIANS は複雑に見えますが、半径 1 マイルの距離を見つけることであることに注意してください。どういうわけか、それらの数式内の「lat」が列リストにあると考えていると思いますか?

よろしくお願いします。

4

2 に答える 2

0

とてもシンプルです。

選択した場所から同じテーブルに参加するため、同じ名前の 2 つの列ができます。フィールド名の前に「テーブル名」を付けないと、SQL エラーが発生します。

次のようなことができます。

SELECT .... FROM lesson_requests_global_2 request
INNER JOIN
( SELECT ..... FROM lesson_request_globals_2 .....)
....
WHERE ....

で出現するすべての名前を変更latしますrequest.lat

requestは、テーブル名のエイリアスになりました。「仮想的に」最初に選択したものです。

于 2012-06-15T15:00:08.250 に答える
0

lesson_requests_global_2 と lesson_requests_vendor の両方に「lat」という列があるようです。クエリを実行するテーブルを指定する必要があります。

SELECT lesson_requests_global_2.student_name,
       (3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lesson_requests_global_2.lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lat)))) AS distance,
       lesson_requests_vendor.user_purchased
FROM lesson_requests_global_2
INNER JOIN
  ( SELECT student_name,
           MAX(request_date) AS max_request_date
   FROM lesson_requests_global_2
   WHERE ( 3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lesson_requests_global_2.lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lesson_requests_global_2.lat))) ) < 30
   GROUP BY student_name ) AS recent_student_lesson_request ON lesson_requests_global_2.student_name = recent_student_lesson_request.student_name
AND lesson_requests_global_2.request_date = recent_student_lesson_request.max_request_date
LEFT JOIN lesson_requests_vendor ON v.user_purchased = lesson_requests_global_2.student_name
WHERE lesson_requests_vendor.user_purchased <> 'bob jones'
  AND distance < 30
ORDER BY distance LIMIT 0 , 20
于 2012-06-15T15:00:11.387 に答える