PostgreSQL 检查给定列表中的值是否存在于 table

PostgreSQL check if values in a given list exist in a table

在 Postgres 中给出如下 table:

id some_col
1 a
1 b
2 a
3 a

我希望输出为 id 和 true(如果 table 中至少有一行具有该 id)或 false(如果在 [=32= 中没有找到具有该 id 的行) ]).

例如 (1, 2, 3, 4, 5) 中的 id:

id value
1 true
2 true
3 true
4 false
5 false

我尝试了 group by 和 case with conditions,但是有什么 optimized/performance SQL 方法可以实现吗? Bcz,groupby 会计算完整的行数,这在这种情况下是不必要的。而且,对于 exists 查询,我没有找到处理多行的方法 return;

提前致谢!

in 子句不会这样做。您需要以某种方式构建一个值列表(values table 值构造函数适用于大多数 rdbms)并与之外部连接:

SELECT x.id, EXISTS (
    SELECT *
    FROM t
    WHERE t.id = x.id
) AS value
FROM (VALUES (1), (2), (3), (4), (5)) AS x(id)