sql - 使用“点”数据类型列查询多条记录
问题描述
我有一个带有“位置”列的表,它是 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 个“或”,而是进行顺序扫描。
有没有办法通过查找确切的点数来进行简单且最佳的查询来获取记录?
解决方案
一种方法是使用any
:
WHERE location ~= any (array['1,1'::point, '2,2'::point])
我希望这会使用可用的索引,但您必须检查您的数据。
推荐阅读
- typescript - 通过创建用于代码重用的 api 服务使用 Cypress 进行 API 测试
- javascript - 如何让我的 Material-ui 卡在行方向上水平排列?
- android - Android - Google 助理未提供 CREATE_CALL BII 的号码
- r - 根据 R 中另一列的条件,用相同的值填充整个新列
- javascript - React Typescript ContextAPI 正确使用接口的方法
- etl - 有多少 Talend 功能在 SQL-Query 中翻译,多少在 Java 中?
- html - 在具有两级行跨度的表上定位粘性
- sql - 这是通过grafana使用它的正确方法吗?
- python - Pandas groupby:一次调用 ffill() + tail(1)?
- java - String.getBytes 是否被安全使用?