【发布时间】: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