首页 > 解决方案 > 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[...],...])

谢谢你。

标签: sqlpostgresql

解决方案


您可以使用一组行:

select id from table where (letter, number) = any(array[(l1, n1), (l2, n2), ...])

如果您打算使用= any. 您可能需要包含大量类型转换以确保所有内容都对齐,因此它可能比加入 VALUES 列表更难看。


推荐阅读