-1

以下の SQL を実行しようとすると、列名の距離が無効であるというエラー メッセージが表示されます。私は自分のSQLにそれほど多くのことを発行していないので、何が問題なのかわかりません。助けてくれてありがとう!

SELECT ID, 
  3959 * ACOS(COS(RADIANS(34.743305)) 
     * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
     + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance
FROM RetailerRegistration
HAVING (distance < 25)
4

3 に答える 3

5

問題は、SELECT リストで作成したエイリアスを参照しようとしていることです。サブクエリを使用してからエイリアスを使用することをお勧めします。

select ID, distance
from
(
  SELECT ID, 
    3959 * ACOS(COS(RADIANS(34.743305)) 
       * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
       + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance
  FROM RetailerRegistration
) d
where distance < 25;

クエリを処理する論理的な順序は次のとおりです。

  1. から
  2. どこ
  3. グループ化
  4. 持っている
  5. 選択する
  6. オーダーバイ

その結果、エイリアスdistanceは WHERE 句に対してまだ定義されていません。これを修正する 1 つの方法は、サブクエリを使用することです。

于 2013-09-25T14:38:43.307 に答える
0

havingと組み合わせて使用​​されgroup byます。と混同していると思います...また、エイリアスを参照するのではなくwhere、式を句に入れてみてください。where

SELECT ID, 
  3959 * ACOS(COS(RADIANS(34.743305)) 
     * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
     + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance
FROM RetailerRegistration
WHERE
  3959 * ACOS(COS(RADIANS(34.743305)) 
     * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
     + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) < 25
于 2013-09-25T14:33:34.197 に答える
-1

あなたは..次のようにしてグループを使用していません:

SELECT ID, 3959 * ACOS(COS(RADIANS(34.743305)) * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance FROM RetailerRegistration where (distance < 25)

個々の行ではなく行のグループに条件を課すために、having 句が使用されます

お役に立てれば....

于 2013-09-25T14:32:57.627 に答える