2016-10-20 1 views
0

Ich schreibe eine Abfrage, um den weitesten Punkt zu einem Speicherort zu finden. Meine Frage ist, wie unten:Verknüpfen Sie Tabellen in zwei Ebenen von Unterabfragen in Oracle

select sighting_ID, SQRT(POWER((28+latitude),2) + POWER((longitude-151),2)) AS distance 
FROM sightings 
WHERE NOT EXISTS(SELECT sighting_id 
    FROM sightings 
    WHERE SQRT(POWER((28+latitude),2) + POWER((longitude-151),2)) < 
     (SELECT SQRT(POWER((28+latitude),2) + POWER((longitude-151),2)) 
     FROM sightings s1 join sightings s2 
     WHERE s1.sighting_ID = s2.sighting_ID)); 

Aber ein Fehler

FEHLER in Zeile auftritt, zu sagen 'wo s1.sighting_ID = s2.sighting_ID': ORA-00905: fehlendes Stichwort‘

Ich mache nicht was ich falsch mache.


Das vorherige Problem ist gelöst. Hier ist meine neue Abfrage.

select sighting_ID, SQRT(POWER((28+latitude),2) + POWER((longitude-151),2)) AS distance 
from sightings 
WHERE NOT exists 
(SELECT sighting_id 
    FROM sightings 
    WHERE SQRT(POWER((28+latitude),2) + POWER((longitude-151),2)) < 
(SELECT SQRT(POWER((28+s1.latitude),2) + POWER((s1.longitude-151),2)) 
    FROM sightings s1 join sightings s2 
    ON s1.sighting_ID = s2.sighting_ID 
    )); 

Aber es sagt der allerletzten wählen Rückkehr mehr als eine Zeile. Ich verstehe, was diese Fehlermassage bedeutet. Aber wie kann ich die Abfrage vergleichen lassen (<) jedes Tupel, das von der letzten Auswahl jeweils zurückgegeben wird?

+0

Ich verstehe nicht, Ihre Frage. Warum haben Sie fest codierte Koordinaten? –

Antwort

0

Sie verwenden ON für JOIN nicht WHERE

FROM sightings s1 
    join sightings s2 
    ON s1.sighting_ID = s2.sighting_ID  
    )); 
Verwandte Themen