【问题标题】:Query for many records using "point" data type column使用“点”数据类型列查询多条记录
【发布时间】:2021-01-29 23:21:43
【问题描述】:

我有一个带有“位置”列的表,它是一个 PostgreSQL“点”类型。

我想搜索许多精确的点,例如:

SELECT * 
FROM my_table 
WHERE location IN ('1,1', '2,2')

这个不行,会报错

运算符不存在:点=点

要查找确切的点,必须使用~=,但这种方式只能查询一个点。

我可以通过使用OR 来解决它,例如:

SELECT * 
FROM my_table 
WHERE (location ~= '0,1' OR location ~= '1,2')

然而,这看起来不是最佳方式,因为它停止使用索引(gist)超过 5 个“或”,而是进行顺序扫描。

有没有一种方法可以通过查找精确的点数来进行简单且最佳的查询来获取记录?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    一种方法是使用any:

    WHERE location ~= any (array['1,1'::point, '2,2'::point])
    

    我希望这会使用可用的索引,但您必须检查您的数据。

    【讨论】:

    • 谢谢。看起来这工作正常并且也使用索引。
    • 在旁注中,可以在末尾键入 cast,例如 WHERE location ~= any (array['1,1', '2,2']:point[])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2019-04-17
    相关资源
    最近更新 更多