SQL嵌套查询与存储函数



我正在尝试执行嵌套查询。在第一个SELECT语句中,我提取所有类型为guest且计算距离小于指定值的guestID。

我创建了一个getDistance(lat1, long1, lat2, long2)来计算两点之间的距离。这里的问题是,在我对用户表执行的嵌套查询中,我在SELECT查询中同时具有user_id和distance。因此,guest上的第一个任务不能简单地工作,因为嵌套查询中同时存在user_id和distance。

我可以准确地把getDistance函数放在哪里,以便整个查询工作。或者是否有一种方法可以只从主查询的嵌套查询中选择user_id ?

SELECT guestId 
FROM guest 
WHERE user_id IN (
    SELECT user_id, getDistance(lati, longi, ?, ?) as distance 
    FROM users 
    WHERE type = 'Guest' 
    HAVING (distance <= ?)

这是你想要的吗?

SELECT guestId 
FROM guest 
WHERE user_id IN (
    SELECT user_id
    FROM users 
    WHERE type = 'Guest'
    AND getDistance(lati, longi, ?, ?) <= ?)

我计算了子查询内的distance并将其重定向到外部选择,在那里您可以使用having并返回user_id

另外,需要一个组by,我可能将其设置为user_id。

SELECT guestId 
FROM guest 
WHERE user_id IN (
        SELECT user_id  
        FROM
        (
           SELECT user_id,getDistance(lati, longi, ?, ?) as distance 
           FROM users 
           WHERE type = 'Guest'  
        ) T1
        GROUP BY user_id
        HAVING (distance <= ?))

最新更新