0

このクエリを実行しようとしていますが、"ORA-00904: "Z1"."LONGITUDE": 無効な識別子" が表示されます。

これを書き換えて、既存のサブクエリでその列にアクセスできるようにする方法はありますか? または、私がやろうとしていることを達成するためのより良い方法は一般的にありますか?

ありがとう

select zip, count(UNIQUE address_id) LOCATIONS
from records 
inner join addresses a using(address_id) 
inner join zip_coords z1 using(zip)
where exists
(
  select 1 from (
    select distance(z1.latitude, z1.longitude, z2.latitude, z2.longitude) d
    from zip_coords z2
    where z2.zip in (
      select zip from available_zips
    )
  ) where d <= 50
)
GROUP BY ZIP
4

3 に答える 3

2

あなたの問題は、サブクエリにそれほど多くのレベルを下げることができないことです。あなたのクエリをざっと読んで何かを見逃したかもしれませんが、次のことができます:

select 1 from (
    select distance(z1.latitude, z1.longitude, z2.latitude, z2.longitude) d
    from zip_coords z2
    where z2.zip in (
      select zip from available_zips
    )
  ) where d <= 50

次のように書き換えないでください。

SELECT 1
FROM zip_coords z2
WHERE z2.zip IN (
  SELECT zip FROM available_zips
)  
AND distance(z1.latitude, z1.longitude, z2.latitude, z2.longitude) <= 50
于 2009-07-20T16:24:28.730 に答える
1
zipを選択し、count(UNIQUE address_id)LOCATIONS
レコードから
内部結合アドレスausing(address_id)
内部結合zip_coordsz1using(zip)
どこ
((
    min(distance(z1.latitude、z1.longitude、z2.latitude、z2.longitude))dを選択します
    zip_coordsz2から
    内部結合available_zipsusing(zip)
)<= 50
GROUP BY ZIP

警告する必要があります。これがクエリのパフォーマンスにどのように影響するかはわかりません。

于 2009-07-20T16:28:05.820 に答える
0

使用する代わりに:

inner join zip_coords z1 using(zip)

FROM句の一部としてzip_coordsz1を含め、WHEREに結合を含めてみてください。これで、サブクエリからz1にアクセスできるようになります。

于 2009-07-20T16:27:37.677 に答える