我有一个带有" location ";列,它是PostgreSQL的"点"。类型。
我想搜索许多精确点,例如:
SELECT *
FROM my_table
WHERE location IN ('1,1', '2,2')
这不起作用,它抛出一个错误
操作符不存在:point = point
要查找精确点,必须使用~=
,但这种方式只能查询一个点。
我可以解决它,通过使用OR
,如:
SELECT *
FROM my_table
WHERE (location ~= '0,1' OR location ~= '1,2')
然而,这看起来不是最优的方式,因为它停止使用索引(gist)超过5 "或"s,并做一个顺序扫描代替。
是否有一种方法,有一个简单的和最佳的查询,通过寻找确切的许多点来获得记录?
一种方法是使用any
:
WHERE location ~= any (array['1,1'::point, '2,2'::point])
我希望它使用可用的索引,但是您必须检查您的数据。