sql - PostgreSQL 多列 WHERE = ANY(ARRAY)
问题描述
我有一个包含三列的表,“id”、“letter”和“number”。我有一个“字母”和“数字”对的列表,我需要在单个查询中获取“id”。显然,简单的解决方案是使用 n 个查询,其中 n 是列表的大小。
SELECT id FROM table WHERE number=... AND letter=...
但这需要 n 个查询,在我的情况下它是数百万并且开销很大。以前,我只对“数字”列表进行过滤,所以我使用了
SELECT id FROM table WHERE number = ANY(ARRAY[...])
是否有一些语法可以满足我的需要,例如
SELECT id FROM table WHERE PAIR[letter,number] = ANY(ARRAY[PAIR[...],...])
谢谢你。
解决方案
您可以使用一组行:
select id from table where (letter, number) = any(array[(l1, n1), (l2, n2), ...])
如果您打算使用= any
. 您可能需要包含大量类型转换以确保所有内容都对齐,因此它可能比加入 VALUES 列表更难看。
推荐阅读
- verilog - 有什么方法可以使用 Yosys 获取 verilog 模块的默认参数值
- python - 如何在三维网格中存储三维物体坐标信息?
- django - 无法将嵌套应用程序中的自定义 Django 模型指定为 AUTH_USER_MODEL
- octave - Octave中的模糊逻辑工具包安装问题
- python - 如何在 Python 装饰器中使用 __func = None
- arrays - 控制台中的角度 8 数组更改但不在视图中
- android - 在应用程序被杀死时处理 FCM 通知
- reactjs - 'this' 隐含类型为 'any' 因为它没有类型 annotation.ts(2683) : 'this' 的外部值被此容器遮蔽
- java - 多个活动的推送通知
- java - 需要使用retrofit2从api返回的响应中获取字符串