PSQL:批处理 select 查询的简便方法

PSQL: Easy way to batch select queries

如果您有 table 个包含 n 列的 A 和一个包含 m 列的值列表,其中 m 是 n 的一个子集,您如何查询 table 其中一个 SQL 语句,而不是多个查询?

示例:用户 table 有 4 列: id, name, ip, email

示例查询:

    SELECT * from users 
    WHERE 
        "id"=? and "name"=?
    USING VALUES
        (1, 'BOB'),
        (3, 'NOT_BOT');

我在调查这个问题时可能没有使用正确的搜索词,但我找不到任何关于这个似乎相当简单的用例的文档。

INTERSECT 要求两个 table 具有相同的列数,因此我必须用“空”值填充现有数据,这感觉很脏。另外,如果 table 发生变化并且列数现在不同了怎么办?以这种方式使用 INTERSECT 的脚本会很乏味。

PREPARE 是最有希望的,但我不确定如何利用它来利用 VALUES,这似乎是一种低效的方式来做我正在做的事情。

您可以使用 IN 运算符:

SELECT * 
from users 
WHERE (id, name) in ( (1,'BOB'), (2, 'NOT_BOB') );