SQL中多个WHERE语句中的子查询

时间:2015-07-21 14:45:05

标签: mysql sql

我有两张桌子:

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) 

哪个失败,因为子查询不能返回多行。这样做的正确方法是什么?

1 个答案:

答案 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;