You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确查询指定业主(John)及周边坐标范围内的所有房产?

解决John房产及周边范围查询的SQL问题

原代码的问题

你的SQL报错核心原因是:当John拥有多套房产时,每个子查询都会返回多个坐标值,而BETWEEN运算符只能接收单个的上下限值,无法匹配多个范围,因此会触发"子查询返回多行"的错误。

正确的查询写法

方法1:使用EXISTS子查询(推荐,性能更优)

这种方式直接判断当前房产是否是John的,或者是否在任意一套John房产的±0.002范围内:

SELECT *
FROM houses_table h
WHERE h.house_owner = 'john'
   OR EXISTS (
       SELECT 1
       FROM houses_table john_houses
       WHERE john_houses.house_owner = 'john'
         AND ABS(CAST(h.coor_x AS DECIMAL(10,6)) - CAST(john_houses.coor_x AS DECIMAL(10,6))) <= 0.002
         AND ABS(CAST(h.coor_y AS DECIMAL(10,6)) - CAST(john_houses.coor_y AS DECIMAL(10,6))) <= 0.002
   );

方法2:使用JOIN关联查询

通过关联John的房产表,筛选出所有落在周边范围的房产,再用DISTINCT去重:

SELECT DISTINCT h.*
FROM houses_table h
JOIN houses_table john_houses 
  ON john_houses.house_owner = 'john'
  AND CAST(h.coor_x AS DECIMAL(10,6)) BETWEEN CAST(john_houses.coor_x AS DECIMAL(10,6)) - 0.002 
                                          AND CAST(john_houses.coor_x AS DECIMAL(10,6)) + 0.002
  AND CAST(h.coor_y AS DECIMAL(10,6)) BETWEEN CAST(john_houses.coor_y AS DECIMAL(10,6)) - 0.002 
                                          AND CAST(john_houses.coor_y AS DECIMAL(10,6)) + 0.002
OR h.house_owner = 'john';

关于新增的x_min/x_max/y_min/y_max字段的作用

这些字段能否解决问题,取决于它们的定义:

  • 如果是预计算的John所有房产的坐标极值范围(比如x_min是John所有coor_x的最小值减0.002,x_max是最大值加0.002),可以简化查询:
    SELECT h.*
    FROM houses_table h
    JOIN (
        SELECT MIN(CAST(coor_x AS DECIMAL(10,6))) - 0.002 AS x_min,
               MAX(CAST(coor_x AS DECIMAL(10,6))) + 0.002 AS x_max,
               MIN(CAST(coor_y AS DECIMAL(10,6))) - 0.002 AS y_min,
               MAX(CAST(coor_y AS DECIMAL(10,6))) + 0.002 AS y_max
        FROM houses_table
        WHERE house_owner = 'john'
    ) john_range
    ON CAST(h.coor_x AS DECIMAL(10,6)) BETWEEN john_range.x_min AND john_range.x_max
       AND CAST(h.coor_y AS DECIMAL(10,6)) BETWEEN john_range.y_min AND john_range.y_max
    OR h.house_owner = 'john';
    
  • 如果这些字段是单套房产自身的坐标范围(比如每个房产的x_min=coor_x-0.002),那对你当前的需求没有帮助——因为你需要的是相对于John所有房产的周边范围,而非单套房产自身的范围。

内容的提问来源于stack exchange,提问作者dprochen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:20:43