首页 > 解决方案 > 在同一个表中查找没有相似位置的条目

问题描述

想象一下,我有一桌快餐店 ( FASTFOOD)。它们中的每一个都在列GEO_X和中设置了地理坐标GEO_Y,还有一列FRANCHISE。特许经营可能是 MCDONALDS 或 BURGERKING。

我想选择在特定距离内没有麦当劳的所有汉堡王,以地理坐标度数测量。

我该怎么做呢?

我能够列出在一定距离内确实有麦当劳的汉堡王:

select t.* 
from FASTFOOD t
  INNER JOIN FASTFOOD s ON (ABS(t.geo_x - s.geo_x) < 0.01 AND ABS(t.geo_y - s.geo_y) < 0.01) 
WHERE t.FRANCHISE= 'BURGERKING'
  AND s.FRANCHISE = 'MCDONALDS';

但我不知道如何找到“对面”。

INNER JOIN无论我使用、LEFT JOINRIGHT JOIN还是,我的查询结果集都是相同的FULL OUTER JOIN,因为所有条目都设置了地理坐标。

标签: sqloraclejoin

解决方案


尝试这个

--下面提到的'geo_z'是两个FRANCHISE'S之间的指定距离

select * 
from (
  select t.* 
  from FASTFOOD t 
    inner join FASTFOOD s on t.PrimaryKey=s.PrimaryKey 
    where ABS(t.geo_x-t.geo_y) > geo_z
) d 
where d.FRANCHISE='BURGERKING'

推荐阅读