【问题标题】:PSQL: Easy way to batch select queriesPSQL:批量选择查询的简便方法
【发布时间】:2021-09-27 20:03:49
【问题描述】:

如果您有一个包含 n 列的表 A,以及一个包含 m 列的值列表,其中 m 是 n 的子集,您如何使用一个 SQL 语句而不是多个查询来查询该表?

示例:users 表有 4 列: id、姓名、ip、邮箱

示例查询:

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

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

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

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

【问题讨论】:

  • 一个小错误:Intersect 不需要表具有相同的列数。它要求结果集具有相同的列数和兼容的数据类型。如果您未能列出选择中所需的列,它只需要表中相同数量的列。见example。结果集不是表格。

标签: postgresql subquery prepared-statement wildcard intersect


【解决方案1】:

您可以使用 IN 运算符:

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

【讨论】:

  • 哇,我知道我想太多了,但没有想那么多。
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 2018-12-26
  • 1970-01-01
  • 2016-04-13
  • 2012-10-03
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多