首页 > 解决方案 > 使用“点”数据类型列查询多条记录

问题描述

我有一个带有“位置”列的表,它是 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 个“或”,而是进行顺序扫描。

有没有办法通过查找确切的点数来进行简单且最佳的查询来获取记录?

标签: sqlpostgresql

解决方案


一种方法是使用any

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

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


推荐阅读