在Oracle中的两级子查询中连接表

时间:2016-10-20 02:53:36

标签: oracle join

我正在编写查询以查找到某个位置的最远点。我的查询如下:

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));

但是发生错误

  

第一行的错误,其中s1.sighting_ID = s2.sighting_ID':ORA-00905:   缺少关键字'

我不知道我做错了什么。

以前的问题已经解决了。这是我的新查询。

    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
    ));

但是它说最后一个选择返回多行。我明白这个错误按摩意味着什么。但是,如何让查询比较(&lt;)每个元组由每个元组返回的每个元组?

1 个答案:

答案 0 :(得分:0)

您使用ONJOIN而不是WHERE

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