1

これは頻繁に議論されるエラーであることは知っていますが、一生懸命試してもうまくいきません。

私は正常に動作する次のクエリを持っています

SELECT b.BID
FROM STUDENT s,
     BUILDINGS b
WHERE sdo_nn(b.LOC, s.LOC, 'sdo_num_res=1', 1) = 'TRUE'

そして、各 s の最近傍を示します。しかし、私が望むのは、最も多く表示される上位 2 bの BID を表示することなので、クエリを次のように変更します。

SELECT b.BID, count(b.BID)
FROM STUDENT s,
     BUILDINGS b
WHERE sdo_nn(b.LOC, s.LOC, 'sdo_num_res=1', 1) = 'TRUE'
GROUP BY b.BID

その後、 index を使用せずに SDO_NN を評価できないというエラーで失敗します。

この問題を解決する方法を教えてください。または別の方法を教えてください。

4

1 に答える 1

0

サブクエリを使用して試すことができます:

SELECT BID, COUNT(*)
FROM (SELECT b.BID
      FROM STUDENT s,
           BUILDINGS b
      WHERE sdo_nn(b.LOC, s.LOC, 'sdo_num_res=1', 1) = 'TRUE'
     ) b
GROUP BY BID;

サブクエリが必要な理由はわかりませんが、最初のクエリが機能する場合、これも同様に機能するはずです。

注: 私はこれを明示的に使用する傾向があります (句join内のコンマを嫌うため):from

SELECT BID, COUNT(*)
FROM (SELECT b.BID
      FROM STUDENT s JOIN
           BUILDINGS b
           ON sdo_nn(b.LOC, s.LOC, 'sdo_num_res=1', 1) = 'TRUE'
     ) b
GROUP BY BID;
于 2015-04-12T02:01:22.077 に答える