我有两张桌子:
Place
-id
-latitude
-longitude
Event
-id
-user_id
-latitude
-longitude
-radius
我需要将已经在某个地方的user_id列表作为输出。我不确定我是否可以使用子查询来完成它,因为我必须同时检查两个参数:纬度(+ - 半径)和经度(+ - 半径)。
承认半径始终为1以简化问题,它提供此查询:
SELECT * FROM event WHERE
latitude > (SELECT latitude-1 FROM place) AND
latitude < (SELECT latitude+1 FROM place) AND
longitude > (SELECT longitude-1 FROM place) AND
longitude < (SELECT latitude+1 FROM place)
哪个失败,因为子查询不能返回多行。这样做的正确方法是什么?
答案 0 :(得分:2)
简单来说(我应该把恐慌引用,因为我没有MySQL或数据来测试这个...)
select distinct
place.id,
user_id
from
event
inner join place on
event.latitude between
place.latitude - event.radius
and place.latitude + event.radius
and event.latitude between
place.longitude - event.radius
and place.longitude + event.radius;