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') );
如果您有 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') );